2
StudentID セッション セメスター 科目

1 2012 1 1
1 2012 1 2
1 2012 1 3
1 2012 1 4
1 2012 1 5
1 2012 2 6
1 2012 2 7
1 2012 2 8
1 2012 2 9
1 2012 2 10
1 2013 2 1
1 2013 2 13
1 2013 2 14
1 2013 2 15
1 2013 2 16
1 2013 3 17
1 2013 3 18
1 2013 3 19
1 2013 3 20
1 2013 3 21

生成したいクエリの名前がわかりません。いろいろ検索しましたが、結果が見つかりませんでした。
私がやりたいのは、学期1、2、および3のレコードを選択するのに役立つクエリを作成することですが、別のセッションの同じ学期であるレコードを除外したいです。具体的に言うと (2012 年の 1 学期と 2013 年の 2 学期と 3 学期を取得したい)。

このアクションは、指定されていないセッションと学期で繰り返されます。

4

4 に答える 4

1

そのクエリが何を表しているのかわかりませんが、LINQ を使用してその結果を達成することは確かにできます。

Where結果を絞り込み、SelectMany複数のシーケンスに参加するのに役立ちます。

var studentData = ...; // your table of data

var studentId = ...; // student Id

var requestedRecords = new [] 
    {
        new { Session = 2012, Semester = 1 },
        new { Session = 2013, Semester = 2 },
        new { Session = 2013, Semester = 3 },
    };

var query = requestedRecords.SelectMany(
                rr => studentData.Where(
                          ss => ss.StudentID == studentId
                             && ss.Session == rr.Session 
                             && ss.Semester == rr.Semester)
            );
于 2013-05-09T13:39:34.667 に答える
0

ここで自己結合を行う必要があると思います。最初にグループ化を実行し、各セッション/学期の組み合わせの最小 (セッション) を取得してから、この結果を完全なテーブルと結合して、セッションと学期に再度結合する必要があります。

これは、LINQ サンプルの非常に優れたリソースです。私は手元にLINQpadを持っていません。

私は通常、製品を推奨することは避けていますが、LINQPad は、LINQ クエリや C# スニペットのプロトタイピングに関しては美しさを考えています。

SQL は次のようになります。

SELECT
    *
FROM
    Course AS C
    INNER JOIN
    (
        SELECT
            MIN(IC.Session),
            IC.Semester
        FROM
            Course AS IC
        GROUP BY
            IC.Session,
            IC.Semester
    ) AS Q ON C.Session = Q.Session AND C.Semester = Q.Semester
于 2013-05-09T13:23:55.690 に答える