linq to entities选择不同的

时间:2012-05-30 23:20:02

标签: linq-to-entities distinct

我一直在努力探索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>()

感谢您提出任何建议

1 个答案:

答案 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

(如果我忘了一些支架,请原谅我)