0

特定の都市に何人の人が住んでいるかを数えようとしています。私はそこに人がいるデータベースを持っています。そのテーブルには、特定の人を別のテーブルである都市にリンクする外部キーがあります。

例:

市z:5名

市y:10名

市×: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

Linq は、.Count() を呼び出しているときにこれを最適化します。結果セット全体が必要ないことがわかります。

また、データベースにヒットしている場合(そうであると思います)、結果セットは IQueryable であり、そこから値を取得しようとするまで実行されないことも覚えておいてください。

于 2012-05-29T23:35:09.803 に答える
0

都市 ID で人々をグループ化するのはどうですか?

于 2012-05-29T23:37:36.373 に答える