0

我有一个表产品。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 往返,我也不想要。

感谢任何帮助!

4

1 回答 1

0

使用投影,而不是急切加载。

var q = from p in Context.Product
        select new ProductPresentation
        {
           Id = p.Id,
           // etc.
           Description = new ProductDescriptionPresentation
           {
               Language = (from l in p.ProductDescription.Languages
                           where l.AlternateCode.Equals("es", StringComparison.OrdinalIgnoreCase)
                           select l).FirstOrDefault(),
               // etc.
           }
        };
于 2010-07-26T13:57:46.667 回答