具有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记录(显然这将“不被吃掉”)。