【发布时间】:2010-07-26 01:27:25
【问题描述】:
我有一个表产品。 Product 以一对多的关系与 ProductDescription 相关。每个产品的 ProductDescription 可以有不止一行。如果产品描述有多个翻译,它将有多个行。产品与语言是多对一的关系。 Language 有一个语言代码(en、es 等)和一个 LanguageId(也可以在 ProductDescription 中找到)。
我想让我的用户能够请求产品并进一步告诉应用程序只返回特定语言的描述。
我很想在 Linq to Entities 中完成这项工作。我想生成这样的 SQL:
SELECT * FROM Product p
JOIN ProductDescription pd ON p.ProductId = pd.ProductId
JOIN (SELECT * FROM Language WHERE AlternateCode = 'es') AS l ON pd.LanguageId = l.LanguageId
(AlternateCode 是语言代码的字段名称)
有人知道怎么做吗?我现在剩下的就是拉下所有语言,然后用 Linq to Objects 过滤掉它们,这肯定不太理想。我可以在循环中获取每个产品的语言代码,但这需要多次 SQL 往返,我也不想要。
感谢任何帮助!
【问题讨论】:
-
哦,我忘了提,以防有人想提“Any()”。这在这种情况下不起作用,因为它对 ProductDescription 应用了一个过滤器,这会影响我的根结果集。由于语言代码,我不希望结果减少我只想防止填充不需要的语言。
标签: c# .net linq-to-entities eager-loading