首页 > 解决方案 > 当非键列中的值之一包含 null 时,如何在 GroupBy 语句中返回 null?

问题描述

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

标签: c#linq

解决方案


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

推荐阅读