如何在LINQ

时间:2019-08-15 08:34:43

标签: c# entity-framework linq

我在数据库中有一个表

Id, Name, CityId, UserId
------------------------
1,  John, 1,      null
2,  John, null,   2
3,  Jack, 1,      null
4,  John, 2,      null

我在这里要做的是生成这样的东西:

Name, Cities, Users
------------------
John, 2,      1
Jack, 1,      0

像:John有两列带有CityId,一列带有UserId,Jack有一列带有CityId,无一列带有UserId。

我首先尝试按名称分组:

var result = GetTable().GroupBy(p => p.Name).Select(p => p.FirstOrDefault().Name);

但是我不知道如何获得城市和用户的数量,或者我应该这样走:

foeach(var item in result){
    GetTable().Where(p => p.Name.Equals(item) && p.CityId.HasValue).Count;
}

与用户相同

1 个答案:

答案 0 :(得分:3)

按名称分组,然后计算每个组的非null CityId和UserId值:

var result = table
    .GroupBy(r => r.Name)
    .Select(grp => new
    {
        Name = grp.Key,
        Cities = grp.Count(x => x.CityId != null),
        Users = grp.Count(x => x.UserId != null)
    }).ToList();