我必须使用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可以实现吗?什么是解决这个问题的好习惯?
答案 0 :(得分: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();
这可能需要在最后的“where”子句中进行调整,以确保“正确”部分正确。 BETWEEN
本身不会从Linq转换为,但只要您可以预测哪个值可能更大,就可以对其进行编码。