2017-05-22 5 views
1

intの場合、親IDがリストにある各親の子要素の数を数えようとします。しかし、カウントは正しくありません。このようなクエリを作成することはできませんか?これを行う正しい方法は何ですか?linq Entity Frameworkで子の一致をカウントする

List<int> ids = [1, 2, 3]; 
var counts = (from d in db.Parent where ids.Contains(d.Id) select d.Child.Count()).ToList(); 
+0

を:これはまだありません明らかです。クエリは、あなたが望むもの、espとまったく同じように思えます。答えにあなたのコメントを見た後。 –

答えて

0

質問は私が欲しいものを正確に行います。申し訳ありません。私の問題は、idリストがソートされておらず、idリストがソートされたときに何らかの形で出力をソートしないようにクエリを作成したことでした。 idsリスト(ids.Orderby(id))をソートすることにより、この問題は解決されました。 (混乱を防ぐために、場合のみ)

3

子は、カウントしようとしているため、コレクションであると仮定します。 以下を試してください: var counts = db.Parent.Where(x => ids.Contains(x.Id)).SelectMany(x => x.Child).Count();

"Count"はIEnumerableで動作します。しかし、あなたはIEnumerablesのコレクションで作業しようとしているようです。これらの状況では、結果として得られるすべてのコレクションが1つのコレクションに結合されるように "SelectMany"を使用します。

+0

ありがとうございます。しかし、私は子要素の個数を数えたいので、各親の子要素の数のカウントを持つintergerのリストで終わります。それが理にかなってほしい。 – ahrberg

+0

あなたは、それぞれの子のカウントに関連する親IDを持つコレクションが必要な場合に意味します。キーと値のペアのコレクションと同様です。それですか? – xambas84

0

カウントと他には何のリストは、十分な情報を提供することがありますが、しばしば含むエンティティのいくつかの情報が有用であろう:あなたの編集後

List<int> ids = [1, 2, 3]; 
var counts = (from d in db.Parent where ids.Contains(d.Id) 
       select new 
       { 
        Parent = d.Name, 
        ChildCount = d.Child.Count() 
       }).ToList(); 
関連する問題