zoukankan      html  css  js  c++  java
  • Entity Framework 6如何进行导航属性的筛选(context.Msg.First(t=>t.Id==1).Include(t=>t.MsgDetail),筛选MsgDetail带条件)

    问题: https://q.cnblogs.com/q/98333/

    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筛选

     

    解决:

    下面以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

     

     

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

    0
    [待解决问题] 浏览: 16次 

    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.Where(t=>t.IsDel == false)

    何解?

  • 相关阅读:
    php读取大文件如日志文件
    大型站点高并发架构技术
    Nginx配置文件nginx.conf详细说明文档
    关于PHP高并发抢购系统设计
    Mysql常用的锁机制
    Sping基础
    Reliable Master持续集成环境搭建Centos
    Win7 macaca自动化环境搭建 PC篇
    安卓appium无线调试
    Selenium PageFactory使用
  • 原文地址:https://www.cnblogs.com/nlh774/p/7513993.html
Copyright © 2011-2022 走看看