[英]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.