0
我想做类似的事情;过滤FirstOrDefault()之前的结果然后使用FirstOrDefault()
Context.Users.Include("Addresses", a => a.IsRowDeleted == false).FirstOrDefault(u => u.UserId == 5);
我是说;我想过滤包含的实体,但并不总是,它也必须是可选的。
这是最好的解决方案是什么?请帮我,
我想做类似的事情;过滤FirstOrDefault()之前的结果然后使用FirstOrDefault()
Context.Users.Include("Addresses", a => a.IsRowDeleted == false).FirstOrDefault(u => u.UserId == 5);
我是说;我想过滤包含的实体,但并不总是,它也必须是可选的。
这是最好的解决方案是什么?请帮我,
在EF您不能过滤急于加载的数据。 Include
操作不支持筛选或排序。
您必须使用投影定制型(或匿名类型):
var query = from u in context.Users
where u.UserId == 5
select new UserFiltered
{
User = u,
Addresses = u.Addresses.Where(a => !a.IsRowDeleted)
};
UserFiltered u = query.FirstOrDefault();
,或者您必须devide查询分成两个分开的查询和使用明确的加载:
context.ContextOptions.LazyLoadingEnabled = false;
var user = context.Users.FirstOrDefault(u => u.UserId == 5);
((EntityCollection<Address>)user.Addresses)
.CreateSourceQuery()
.Where(a => !a.IsRowDeleted)
.Execute();
或者你可以只需使用两个查询:
var user = context.Users.FirstOrDefault(u => u.UserId == 5);
var addresses = context.Addresses.Where(a => a.User.UserId == 5 && !a.IsRowDeleted).ToList();
你的意思是这样(警告:未经测试的代码):
Context.Users.SingleOrDefault(u => u.Addresses.Where(a => a.IsRowDeleted == false).Count > 0) && u.UserId == 5);
请问您能更清楚地询问您想问什么?如果你可以举例说明会很好。包含定义在哪里? – Maheep 2012-01-30 04:15:55