我一直在努力探索LINQ到实体的命名。并且非常感谢帮助制定出如何有效和高效地使用LINQ命名法(即让数据库返回最少数量的记录,而不是在程序级别迭代更大的集合)。到目前为止,我经常依赖存储过程和视图来完成工作,但是会很感激学习LINQ的方法。
首先,有人会帮助'翻译'SQL查询:
SELECT InfusionDrugID, fullname
FROM dbo.infusionDrugs
WHERE (InfusionDrugID IN
(SELECT DISTINCT infusionDrugID
FROM dbo.fixedTimeDilutions))
我也会对如何选择不在另一张表中的记录感兴趣。
这有点复杂,因为fixedTimeDilutions使用每个具体类型继承的表,并继承自抽象类infusionDilutions,因此linq语句必须包含一行如。
from inf in PICUentities.infusionDilutions.OfType<fixedTimeDilutions>()
感谢您提出任何建议
答案 0 :(得分:1)
如果您想使用linq,您必须思考 linq。也就是说,尝试使用linq和“忘记”SQL来表达您想要实现的C#代码。
但是,如果你这样做,你很快就会发现忘记SQL是不可能的,因为linq和其他C#代码的许多组合都没有转化为SQL。所以它是给予和接受的,想想linq,但要了解实体框架做了什么,不做什么。
在您的情况下,您需要infusionDrugs
中找到的fixedTimeDilutions
。 linq的方式是:
c.infusionDrugs
.Where(i => c.fixedTimeDilutions.OfType<fixedTimeDilutions>().Select(f => f.infusionDrugID).Distinct())
.Contains(i.InfusionDrugID)) // Or i.InfusionDrugID.Value
(其中c
是您的上下文)
或者
c.infusionDrugs
.Where(i => c.fixedTimeDilutions.OfType<fixedTimeDilutions>()
.Any(f => f.infusionDrugID == i.InfusionDrugID)) // Or i.InfusionDrugID.Value
(如果我忘了一些支架,请原谅我)