具有ifelse条件的LinqGroupBy对象

c#

我是 c# linq 的新手并且正在努力解决某些问题。我有一个列表,想从中收集特定信息,如下例所示:

假设我有以下kidsEat对象列表:

{NAME=joseph, FOOD=banana, EATEN=true}
 
{NAME=joseph, FOOD=apple, EATEN=false}

{NAME=billy, FOOD=banana, EATEN=false}

{NAME=billy, FOOD=apple, EATEN=false}

从这个列表中,我想知道每个男孩是否吃过任何东西。

如果他确实吃了什么东西,它会带走说他吃过的东西。

如果他没有吃东西,它会在他没有吃东西的地方随机抽取一个。

因此,此示例应返回以下 2 个对象的列表:

{NAME=joseph, FOOD=banana, EATEN=true}

{NAME=billy, FOOD=banana, EATEN=false}     //banana could be switched to apple, it doesn't matter

所以。我想到了这样的事情:

KidsList.GroupBy(kid=>kid.NAME).Where().Select(kid=>kid.First())

但我不知道在 where 子句中放什么,因为它就像遍历所有行,然后查找其中一个是否为真,如果是,则输入“真”,否则输入假。感觉它需要一些 if else 在 LINQ 查询中。

有什么帮助吗?

回答

如果没有“吃过”记录,则选择第一个“吃过”记录或第一个“未吃过”记录

KidsList.GroupBy(k => k.NAME)
  .Select(g => g.FirstOrDefault(k => k.EATEN) ?? g.First())

说明:如果没有匹配k => k.EATEN谓词的记录,则FirstOrDefault返回默认值,即null。在这种情况下,空合并运算符??将评估右侧的操作数并返回First记录(显然这将“不被吃掉”)。


以上是具有ifelse条件的LinqGroupBy对象的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>