0

我试图计算有多少人住在某个城市。我有一个包含人的数据库,该表有一个外键将某个人链接到一个城市,这是另一个表。

例子:

z市:5人

y市:10人

城市x:4人

我能够取回这些结果,但我只是不喜欢我这样做的方式,因为我调用了数据库 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 有更好/更有效的方法,但我似乎找不到方法。

有任何想法吗?

亲切的问候,简

4

4 回答 4

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()});
于 2012-05-29T23:36:00.253 回答
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() };
于 2012-05-30T00:00:46.160 回答
0

当您调用 .Count() 时,Linq 会为您优化它。它意识到您不想要整个结果集。

还要记住,如果您正在访问数据库(我假设您是),结果集是一个 IQueryable,在您尝试从中获取值之前不会执行。

于 2012-05-29T23:35:09.803 回答
0

如何按城市 ID 对人进行分组?

于 2012-05-29T23:37:36.373 回答