我在数据库中有一个表
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;
}
与用户相同
答案 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();