当非键列中的值之一包含null时,如何在GroupBy语句中返回null?

时间:2019-06-23 18:00:53

标签: c# linq

我想对一个表进行分组,该表由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)
});

1 个答案:

答案 0 :(得分:2)

您可以使用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
    };
});