C# 我怎么能在林克做这个

C# 我怎么能在林克做这个,c#,entity-framework,linq,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 foeach(va

我在数据库里有一张桌子

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
foeach(var item in result){
    GetTable().Where(p => p.Name.Equals(item) && p.CityId.HasValue).Count;
}
比如:John有两列带有CityId,一列带有UserId,Jack有一列带有CityId,没有一列带有UserId

我试着先按名字分组:

var result = GetTable().GroupBy(p => p.Name).Select(p => p.FirstOrDefault().Name);
但是我不知道如何计算城市和用户的数量,或者我应该这样做:

Name, Cities, Users
------------------
John, 2,      1
Jack, 1,      0
foeach(var item in result){
    GetTable().Where(p => p.Name.Equals(item) && p.CityId.HasValue).Count;
}

同样适用于按名称分组的用户,然后计算每个组的not 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();

这个问题看起来更像是给出需求。还请添加您到目前为止尝试过的内容?@Sunil刚刚添加,因为我忘了做它gettable.GroupByx=>x.Name.Selecty=>new{Name=y.Key,Cities=y.Counta=>a.CityId!=null,Users=y.Countb=>b.UserId!=null}@ErtanHasani也许kaffekopp的答案对您来说更易读:-每个组都有一个键。最好使用:Name=grp.Key