首页 新闻 会员 周边

Entity Framework 6如何进行导航属性的筛选(context.Msg.First(t=>t.Id==1).Include(t=>t.MsgDetail),筛选MsgDetail)

0
[已解决问题] 解决于 2017-11-23 09:24

Msg表(Id,Content,IsDel)。内有 virtual ICollection<MsgDetail> MsgDetails属性

MsgDetail表(Id,MsgId,SubContent,IsDel)

两者是一对多关系。

如何进行如下意思的的筛选?

context.Msg.First(t=>t.Id==1).Include(t=>t.MsgDetail.Where(t=>t.IsDel == false))  //仅筛选IsDel==false的MsgDetails记录。

上述代码 : .Include(t=>t.MsgDetail.Where(t=>t.IsDel == false))  错误,报错

只能.Include(t=>t.MsgDetail)  后再次linq to object筛选

何解?

nlh774的主页 nlh774 | 菜鸟二级 | 园豆:204
提问于:2017-09-11 17:21
< >
分享
最佳答案
1

可以实现。下面以Blog~Comments 的一对多关系为例解释、书写代码。

db.Configuration.LazyLoadingEnabled = false;  //必须关闭延迟加载,否则一旦使用Blog.Comments就会再次查询DB的Comments表,加载Blog下的所以Comments而不筛选IsDel。
Blog blog = db.Blog.Include(b => b.Comments)
.Select(b => new {BlogEntity = b, Comments = b.Comments.Where(c => c.IsDel == false)})
.Where(blogEntity => blogEntity.BlogEntity.Id == id)
.ToList() //立即执行sql查询
.Select(t => t.BlogEntity).First(); //linq to object内存查询、ef自动转换Comments到BlogEntity.Comments

//方法2
//var ret = db.Blog.Include(b => b.Comments)
// .Select(b => new {BlogEntity = b, Comments = b.Comments.Where(c => c.IsDel == false)})
// .FirstOrDefault(blogEntity => blogEntity.BlogEntity.Id == id); //FirstOrDefault
//Blog blog = ret == null ? null : ret.BlogEntity;

 

参考:http://www.bkjia.com/Asp_Netjc/970649.html

http://stackoverflow.com/questions/25276978/ef-6-add-where-clause-to-an-include-with-navigation-property

nlh774 | 菜鸟二级 |园豆:204 | 2017-09-13 10:21
其他回答(1)
0

context.Msg.First(t=>t.Id==1).Include(t=>t.MsgDetail).selectmany(d=>d.MsgDetail).where(m=>!m.Isdel)

Jeffcky | 园豆:2789 (老鸟四级) | 2017-09-11 23:36

是一种思路,但不对:

1.语法错误、无法编译:.First(t=>t.Id==1)后无法跟上.Include(t=>t.MsgDetail)

2.即使做成: var query = context.Msg.Where(t=>t.Id==1).Include(t=>t.MsgDetail).SelectMany(d=>d.MsgDetail).Where(m=>!m.Isdel);    该语句最后返回的是IQueryable<out MsgDetail>集合类型,而非我需要的Msg主对象实体(内部含IsDel=false的MsgDetails集合)

支持(0) 反对(0) nlh774 | 园豆:204 (菜鸟二级) | 2017-09-12 08:47

有其他办法么

支持(0) 反对(0) nlh774 | 园豆:204 (菜鸟二级) | 2017-09-12 08:48

@nlh774: 既然无法翻译,那就先tolist下!

支持(0) 反对(1) Jeffcky | 园豆:2789 (老鸟四级) | 2017-09-12 09:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册