0


StudentID - MotherID - FatherID の 3 つの列を持つテーブル (Students) があります。

次のことを行うためにLINQクエリを作成する方法を理解するのに苦労しています:

私は、全兄弟の数が 'y' 未満 (母親 ID と父親 ID が同じ) で、半兄弟の数が 'z' 未満 (同じ父親 ID で母親 ID が異なる) のすべての生徒のリストを取得したいと考えています。

LINQ を使用すると、半分の兄弟関係に基づいて正しい行を取得できますが、完全な兄弟関係にはなりません。

   var c = studentsDT
                .GroupBy(a => new { a.FatherID}).Where(grp => grp.Count() <= halfSiblings)
                .SelectMany(grp => grp.Select(r => r))
                .GroupBy(a => new { a.MotherID}).Where(grp1 => grp1.Count() <= fullSiblings)
                .SelectMany(grp1 => grp1.Select(r1 => r1));

テーブル データが次のような場合:
1 100 200
2 101 200
3 100 200
4 100 200
5 101 200

上記のデータ スニペットでは、学生 1 には父親による 2 つの完全な兄弟と 2 つの異母兄弟がいます。生徒 2 には、父方の兄弟姉妹が 1 人、腹違いの兄弟が 3 人います。

完全な兄弟姉妹が 2 人以下で、異母兄弟が 1 人以下の生徒のみを含むリストが必要な場合、どうすればこれを実現できますか?

4

2 に答える 2

1

完全な兄弟の数を取得するには、グループ化する 2 つのキーを指定する必要があります。

var c = studentsDT
    .GroupBy(a => new { a.FatherID, a.MotherID })
    .Where(g => g.Count() <= fullSiblings)
    .SelectMany(g => g)
    .GroupBy(a => a.FatherID)
    .Where(g => g.Count() <= halfSiblings)
    .SelectMany(g => g);

これは、完全な兄弟を半分の兄弟としてカウントすることに注意してください (つまり、完全な兄弟と半分の兄弟の合計数が 未満であることを保証しますhalfSiblings)。

于 2013-08-20T19:31:45.393 に答える