我希望我的查询结果只包含一些已提交的数据。对于instatnce说我有每个销售的实体销售和物品有一个物品属性,这是特定销售的物品清单:
from s in myContext.Sales
select s;
返回包含所有项目的每个销售的所有销售额(当我导航到项目时,默认情况下LazyLoading处于启用状态)。但是我想只为每个销售包含特定项目 - 比如名称==“橙色”的项目,我仍然想要所有销售。我怎样才能做到这一点?
答案 0 :(得分:4)
如果启用了延迟加载,它实际上会延迟加载您引用的内容。如果您不想启用它,请将其关闭。
myContext.Configuration.LazyLoadingEnabled = false;
您可以指定您希望在初始数据库往返中加载某些内容,以便不需要延迟加载。在那里,包含是你的朋友。
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;
请注意,您可以始终禁用特定属性的延迟加载,方法是不将其声明为虚拟。
我推荐以下博客以获得精彩概述
答案 1 :(得分: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项目附加你想要的相关项目(获取一些项目的关键是CreateSourceQuery()方法):
foreach(Sale s in sales)
s.Items.Attach(s.Items.CreateSourceQuery().Where(i => i.Name == "Orange"));