0

LINQ を使用して C# でいくつかのクエリを作成する必要があります。SQLリクエストでロジックを試しました。次のようになります。

SELECT DISTINCT test_laktationen.lom, test_laktationen.laktanfang, test_laktationen.laktende, b_milch_hms_diagnose.diagnose
FROM            test_laktationen INNER JOIN
                         b_milch_hms_diagnose ON test_laktationen.lom = b_milch_hms_diagnose.lom AND b_milch_hms_diagnose.behanddatum BETWEEN 
                         test_laktationen.laktanfang AND test_laktationen.laktende INNER JOIN
                         b_milch_hms_kalbung ON test_laktationen.lom = b_milch_hms_kalbung.lom AND test_laktationen.laktanfang = b_milch_hms_kalbung.kalbedatum
WHERE        (b_milch_hms_diagnose.diagnose LIKE '6.01.01.%' OR
                         b_milch_hms_diagnose.diagnose LIKE '6.01.02.%' OR
                         b_milch_hms_diagnose.diagnose LIKE '6.01.03.%' OR
                         b_milch_hms_diagnose.diagnose LIKE '6.01.04.%') AND (b_milch_hms_kalbung.gebverlauf = 3 OR
                         b_milch_hms_kalbung.gebverlauf = 4)

これは正常に機能しますが、データ テーブルからこの要求を行う必要があります。これはLINQで可能ですか?この問題を解決するための良い習慣は何ですか?

4

1 に答える 1

1

直接アクセスを実行するには、データコンテキストが必要になります。開始するには、Linq2Sqlクラスファイル(* .dbml)をお勧めします。サーバーエクスプローラーを使用してLinq2Sqlクラスにデータ構造を作成すると、linqステートメントは次のようになります。

var context = new MyLinq2SqlContext();

var results = (from lak in context.test_laktationen
    join milch in context.b_milch_hms_diagnose
        on lak.lom equals milch.lom
    join kalbung in context.b_milch_hms_kalbung 
        on lak.lom equals kalbung.lom and lak.laktanfang equals kalbung.kalbedatum
    where 
        (milch.diagnose.StartsWith("6.01.01") ||
        milch.diagnose.StartsWith("6.01.02") ||
        milch.diagnose.StartsWith("6.01.03") ||
        milch.diagnose.StartsWith("6.01.04")) &&
       (kalbung.gebverlaug == 3 || kalbung.geberlauf == 4) &&
       ((milch.behanddatum > lak.laktanfang && milch.behanddatum < lak.laktende) ||     (milch.behanddatum < lak.laktanfang && milch.behanddatum > lak.laktende))
    select new {
            lak.lom, 
            lak.laktanfang,
            lak.laktende,
            milch.diagnose
    }).Distinct();

これには、「between」部分が正しくなるように、最後の「where」句を微調整する必要があります。BETWEENLinqからネイティブに変換されませんが、どちらの値が大きくなる可能性が高いかを予測できる限り、コード化できます。

于 2012-11-26T14:33:39.180 に答える