【发布时间】:2011-10-28 02:33:56
【问题描述】:
问题来了: 我需要返回带有过滤嵌套集合的对象集合。 例如:有一个带有订单的商店,我需要返回一个包含商店的集合,其中包含带有订单的嵌套集合,但没有来自标记为已删除的客户的订单。
这是我尝试做的。但仍然没有运气。任何建议表示赞赏:)
public List<StoreEntity> GetStores(Func<Store, bool> storeFilter, Predicate<OrderEntity> orderFileter)
{
IQueryable<StoreEntity> storeEntities = Context.Stores
.Include(o => o.Order)
.Include(cu => cu.Orders.Select(c => c.Customer))
.Where(storeFilter)
//.Where(rcu=>rcu.Orders.Select(cu=>cu.Customer.Deleted==false)) //just test this doesn't work
.AsQueryable();
List<StoreEntity> storeEntities = storeEntities.ToList();
//storeEntities.ForEach(s => s.Orders.ToList().RemoveAll(c=>c.Customer.Deleted==true)); // doesn't work
foreach (StoreEntity storeEntity in storeEntities)
{
storeEntity.Orders.ToList().RemoveAll(r=>r.Customer.Deleted==true);
}
return storeEntities;
}
问题是没有应用过滤器。已删除标记设置为 true 的客户保留在集合中。
【问题讨论】:
-
还有什么问题?它不会编译吗?它会引发运行时异常吗?它会运行但返回错误的数据吗?
-
我最终使用了这个 nuget 包:
Z.EntityFramework.Plus.QueryIncludeFilter.EF6此处的文档:github.com/zzzprojects/EntityFramework-Plus/wiki/… -
@BronDavies 这个 Nuget 包应该是公认的答案,而不是评论!
标签: linq entity-framework entity-framework-4.1 filtering