我想对包含3列的表格进行分组:“国家/地区”,“人名”和“等级”。
我的目标是:当将一个或多个人的等级分组为NULL的国家/地区时,该特定国家/地区的GroupBy LINQ语句的最终输出应为NULL,而与该国家/地区的其他等级无关。
但是,当我编写以下代码对其进行分组时,LINQ假定NULL等于零,并返回特定国家/地区的成绩总和。
var query = toIEnumerable.GroupBy(c => c.country).Select(r => new
{
r.Key,
sumGrade = r.Sum(f => f.grade)
});
最佳答案
您可以使用LINQ的Any
方法完成此操作:
var query = toIEnumerable.GroupBy(c => c.country).Select(r =>
{
bool someWithNoGrades = r.Any(i => i.grade == null);
return new
{
r.Key,
sumGrade = !someWithNoGrades ? r.Sum(f => f.grade) : null
};
});