LINQ Distinct Count返回异常:预期值2实际得到1
问题分析与解决
嘿,我一眼就看出问题出在哪了——你误用了Distinct()方法!
先给你掰扯清楚:Distinct()的作用是移除集合里的重复元素,你的schedualCodes列表里两个元素都是一模一样的"A1",经过Distinct()处理后就只剩1个"A1"了,所以Count()返回1是完全符合逻辑的。但你说预期是2,这说明你真正想统计的是满足筛选条件的总记录数,而不是去重后的不同值数量。
修正方案
你有两种简单的修正方式:
- 直接去掉
Distinct(),统计列表的总元素数:
int schedualCodeCount = schedualCodes.Count();
- 更高效的写法——跳过创建中间列表的步骤,直接在LINQ查询里完成计数(节省内存和性能开销):
// 删掉原来的schedualCodes列表创建代码,直接用这行 int schedualCodeCount = allTimes.Count(key => key.SchedualCode == schedualCode && key.ViewOnSchedual);
这样修改后,schedualCodeCount就会返回你预期的2了。
另外补充一句:如果你的真实需求确实是统计不同的SchedualCode数量,那你当前的代码是正确的,但预期值2就是错误的(因为筛选后只有"A1"这一种值)。不过从你的注释和问题描述来看,你肯定是想统计符合条件的记录总数,所以上面的修正应该能完美解决你的问题。
内容的提问来源于stack exchange,提问作者Ali Kleit
相关产品推荐
相关产品推荐

