簡體   English   中英

使用內部聯接將SQL語句轉換為LINQ

[英]Translate SQL statement with inner joins to LINQ

我必須使用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有可能嗎? 有什么好的做法可以解決這個問題?

您將需要一個數據上下文來執行直接訪問。 我建議使用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();

這可能需要對最后的“ where”子句進行調整,以確保正確設置“ between”部分。 BETWEEN並不是從Linq本地翻譯過來的,但是只要您可以預測哪個值可能更大,就可以對其進行編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM