当前位置:  开发笔记 > 编程语言 > 正文

使用LINQ,获取满足分组标准的项目数

如何解决《使用LINQ,获取满足分组标准的项目数》经验,为你挑选了2个好方法。

如果我努力的话,我可能会去修理术语,所以通过代码描述它会更容易:

var fooGroup = fooList.GroupBy(x => x.SomeID);
//fooGroup is now of type IEnumerable>
var someCount = fooGroup.Count(y => y.Where(f => f.Bar == "Bar"));

由于此错误,上述内容将无法编译:"无法将lambda表达式转换为委托类型,System.Func,bool> 因为块中的某些返回类型不能隐式转换为委托返回类型"

我认为答案很简单,但我不能完全理解如何做到这一点.



1> Khan..:

你想要对一个小组做什么并不是很有意义.我提出以下建议.

如果您正在寻找有多少元素Bar == "Bar",那么在该组之前进行.

var someCount = fooList.Count(y => f.Bar == "Bar");

如果您要计算包含符合相同条件的元素的组.

var fooGroup = fooList.GroupBy(x => x.SomeID)
    .Where(x => x.Any(z => z.Bar == "Bar")).Count();



2> h.alex..:

IEnumerable>你进行分组.

这是一个IEnumerable群体.该组具有密钥类型int,这是因为您按int id列分组.分组包含一个IEnumerable包含所有具有此密钥的对象列表.它是类型Foo.

那么这是一个简单的查询.从分组中,您可以找到具有所需密钥的那些(即int id),然后从组中选择计数IEnumerable.

var fooGrouping = fooList.GroupBy(x => x.SomeID);
var someCount = fooGrouping.Where(grp => grp.Key == someKey).Select(p=>p.Count());

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有