0

我希望我的查询结果只包含一些相关的数据。例如,我有实体 Sale 和 Item ,每个 Sale 都有一个 Items 属性,该属性是特定销售的 Item 列表:

from s in myContext.Sales
select s;

返回所有销售,每个销售包含所有项目(当我导航到项目时,默认情况下 LazyLoading 处于打开状态)。但我只想包含每个销售的特定项目 - 比如说名称 ==“橙色”的项目,我仍然想要所有销售。我怎样才能做到这一点?

4

2 回答 2

4

如果开启延迟加载,它实际上会延迟加载您引用的内容。如果您不想启用它,请将其关闭。

myContext.Configuration.LazyLoadingEnabled = false;

您可以指定您希望在初始数据库往返中加载某些内容,这样就不需要延迟加载。在那里,Include是你的朋友。

using System.Data.Entity; // You need this to get the lambda version of Include

from s in myContext.Sales.Include(s => s.PropertyA).Include(s => s.PropertyB)
select s;

请注意,您始终可以通过不将特定属性声明为虚拟来禁用延迟加载。

我推荐以下博客以获得很好的概述

http://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6-loading-related-entities.aspx

于 2012-08-09T04:03:49.663 回答
0

我的回答是针对 EF 4.0 的,主要来自这里:http: //msdn.microsoft.com/en-us/library/bb896249.aspx

防止 LazyLoading 在访问导航属性时加载所有内容:

myContext.Configuration.LazyLoadingEnabled = false;

加载您的项目:

List<Sale> sales = (from s in myContext.Sales
                    select s).ToList()

Foreach item 附加你想要的相关项目(只获取一些项目的关键是 CreateSourceQuery() 方法):

foreach(Sale s in sales)
    s.Items.Attach(s.Items.CreateSourceQuery().Where(i => i.Name == "Orange"));
于 2012-08-09T07:08:57.817 回答