我想对包含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
    };
});

10-08 06:52
查看更多