为了账号安全,请及时绑定邮箱和手机立即绑定

如何过滤嵌套的集合实体框架对象?

如何过滤嵌套的集合实体框架对象?

拉风的咖菲猫 2019-09-26 15:08:06
如何过滤嵌套的集合实体框架对象?这是问题所在:我需要返回带有过滤的嵌套集合的对象集合。例如:有一家有订单的商店,我需要返回一个商店的集合,其中包括带有订单的嵌套集合,但没有来自客户的标记为已删除的订单。这是我尝试做的。但是仍然没有运气。任何建议表示赞赏:)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的客户将留在集合中。
查看完整描述

3 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

您当前使用的代码存在以下问题:

storeEntity.Orders.ToList().RemoveAll(r=>r.Customer.Deleted==true);

storeEntity.Orders.ToList()返回内容为的 List<OrderEntity>内容storeEntity.Orders。从此新列表中,删除所有已删除的客户。但是,此后没有在任何地方使用此列表。

但是,即使它可以完成您想要的操作,这也会从数据库中删除那些客户,因为您的StoreEntity对象仍然连接到数据上下文!

您真的想在首次在评论中尝试使用过滤器Where。请参阅Yakimych的答案以寻求帮助。


查看完整回答
反对 回复 2019-09-26
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

如果我有一个名为GetWithInclude() public IQueryable<TEntity> GetWithInclude(params Expression<Func<TEntity, object>>[] includeProperties) { return includeProperties.Aggregate<Expression<Func<TEntity, object>>, IQueryable<TEntity>>(DbSet, (current, includeProperty) => current.Include(includeProperty)); } Yet 的通用方法 怎么办,我没有集合,而我需要从投影中进行过滤。换句话说,我有一个需要相等的属性。

查看完整回答
反对 回复 2019-09-26
  • 3 回答
  • 0 关注
  • 521 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信