这是我前几天发布的另一个问题的副产品,该问题得到了成功的回答,但它确实没有涉及到我所面临的潜在问题,但在最初的查询中无法完全表达。
我有一种餐桌用品。产品在一对多关系中与产品描述相关。每个产品的ProductDescription可以有多行。如果产品描述有多个翻译,它将有多行。产品与语言有多对一的关系。语言有一个语言代码(en、es等)和一个languageID(也可以在productDescription中找到)。
我想让我的用户能够请求一个产品,并进一步告诉应用程序只返回特定语言的产品描述。
我现在遇到的问题是,我知道我需要使用投影来完成这个问题第3段中的任务。像这样:
var query = inventoryRepository.Products
.Where(wherePredicate)
.Select( a=> new Product
{
ProductDescriptions = inventoryRepository.ObjectContext.ProductDescriptions
.Where(a => a.Languages.AlternateCode.Equals("en", StringComparison.CurrentCultureIgnoreCase))
});
但是,我在products表中有大约15个属性,以及4个产品的其他子表,这些子表除了语言部分之外,还需要为结果集加载。有没有什么方法可以让我进行热切的加载和投影,这样我就不必手动浏览和映射所有这些属性和子对象了?下面是我的代码的位置:
var query = inventoryRepository.ObjectSet
.Include("ProductDescriptions")
.Include("ProductAllowedWarehouses")
.Include("ProductToCategories")
.Include("PriceLevels")
.Include("AttachmentAssociations.Attachment").AsExpandable()
.Where(wherePredicate);
没有必要选择,这真的很好。一旦我将ProductDescriptions更改为投影,我就添加一个Select,然后就不会免费填充任何其他属性/子项。