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();
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();
質問は私が欲しいものを正確に行います。申し訳ありません。私の問題は、idリストがソートされておらず、idリストがソートされたときに何らかの形で出力をソートしないようにクエリを作成したことでした。 idsリスト(ids.Orderby(id))をソートすることにより、この問題は解決されました。 (混乱を防ぐために、場合のみ)
子は、カウントしようとしているため、コレクションであると仮定します。 以下を試してください: var counts = db.Parent.Where(x => ids.Contains(x.Id)).SelectMany(x => x.Child).Count();
"Count"はIEnumerableで動作します。しかし、あなたはIEnumerablesのコレクションで作業しようとしているようです。これらの状況では、結果として得られるすべてのコレクションが1つのコレクションに結合されるように "SelectMany"を使用します。
カウントと他には何のリストは、十分な情報を提供することがありますが、しばしば含むエンティティのいくつかの情報が有用であろう:あなたの編集後
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();
を:これはまだありません明らかです。クエリは、あなたが望むもの、espとまったく同じように思えます。答えにあなたのコメントを見た後。 –