我试图了解某个城市居住的人数。我有一个包含人员的数据库,该表有一个外键将某个人与一个城市联系起来,这是另一个表。
示例:
我能够得到这些结果,但我只是不喜欢我这样做的方式,因为我正在调用数据库x次。
public List<int> getStuff(List<int> listOfCityIDs )
{
var returnList = new List<int>();
foreach (int z in listOfCityIDs)
{
returnList.Add((from x in conn.people
where x.city == z
select x).Count());
}
return returnList;
}
我非常确定使用一些LINQ有更好/更有效的方法,但我似乎无法找到它。
任何想法?
亲切的问候, 简答案 0 :(得分:3)
这将很好地转换为SQL语句。
conn.people.GroupBy(p => p.city).Select(p => new { City = p.Key, Count = p.Count()});
这将使他们全部。如果您想要某些城市,请尝试
conn.people.Where(p => listOfCityIDs.Any(c => c == p.city))
.GroupBy(p => p.city).Select(p => new { City = p.Key, Count = p.Count()});
答案 1 :(得分:2)
如果您需要更清晰的语法并且它可以作为延迟查询
var g = from c in cities
join p in people
on c equals p.CityId
group p.CityId by p.CityId into grouped
select new { CityId = grouped.Key, Count = grouped.Count() };
答案 2 :(得分:0)
当你打电话时,Linq会为你优化这个.Count()它意识到你不需要整个结果集。
还要记住,如果您正在访问数据库(我假设您是这样),那么结果集是一个IQueryable,在您尝试从中获取值之前,它不会被执行。
答案 3 :(得分:0)
如何按城市ID分组人员?