1

在了解 LINQ to 实体命名法方面,我有点挣扎。并且非常感谢一些帮助解决如何有效和高效地使用 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>()

感谢您的任何建议

4

1 回答 1

1

如果你想使用 linq,你必须考虑linq。也就是说,尝试用 linq 和“忘记”SQL 的 C# 代码来表达你想要实现的任何东西。

但是,如果您这样做,您很快就会发现忘记 SQL 是不可能的,因为许多 linq 和其他 C# 代码的组合并不能转换为 SQL。所以它是给予和接受,想想 linq,但要了解 Entity Framework 做什么和不吞下什么。

在您的情况下,您希望infusionDrugsfixedTimeDilutions. 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

(如果我忘记了一些括号,请原谅我)

于 2012-05-31T09:01:07.593 回答