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)

    何解?

  • 相关阅读:
    c# 读改xml
    window
    c# 日期字符格式化
    验证字符串是否为数字
    MySQL常用操作基本操作
    将参数扩展为指定长度的字符串,不足位数的在前方加0
    hp服务器重装后,启动apache和tomcat和mysql
    [转] 各种取整数函数(VB)
    [原] access97中textbox类似vb的maxlength功能的实现
    [转] csv文件的读写
  • 原文地址:https://www.cnblogs.com/nlh774/p/7513993.html
Copyright © 2011-2022 走看看