2012-05-30 93 views
1

我一直在努力让我的脑袋围绕LINQ实体命名。并且非常感谢一些帮助,了解如何有效和高效地使用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

如果你想与你的LINQ to工作认为 LINQ。也就是说,试着用linq和“忘记”SQL来表达你想要达到的C#代码。

但是,如果你这样做,你很快就会发现不可能忘记SQL,因为许多linq和其他C#代码的组合都不能转换成SQL。所以这是给和想要的,想想linq,但是要知道实体框架做了什么并且不会吞下去。

对于您的情况,您需要在fixedTimeDilutions中找到infusionDrugs。 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 

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

+0

谢谢你 - 精美的作品 - 我会开始尝试'思考linq' – Brent