entity framework包括filter子集合
我在LINQ查询中为包含的项添加一些过滤条件有些困难。 我的查询是这样的
var item = _Context.Order.Include("Inner") .Include("Inner.first") .Include("Inner.second") .Where(x => ( !(x.IsDeleted) && (x.IsActive) && (x.itemid == id))).FirstOrDefault();
在上面的代码中,“Inner”是另一个项目列表。 现在我需要过滤内部项目。 我只需要内部项目,过滤条件为inner.isDeleted = true。
查询应该返回一个类,
public class Order { public string Name { get; set; } public List Inner{ get; set; } public bool IsDeleted { get; set; } }
和InnerDetails类一样
public class InnerDetails { public string Sample { get; set; } public bool IsDeleted { get; set; } public int firstId { get; set; } public int secondID { get; set; } public First first{ get; set; } public Second second{ get; set; } }
任何人都可以建议我采用更好的方法,因为我是LINQ和EF的新手
免责声明 :我是项目Entity Framework Plus的所有者
EF + Query IncludeFilterfunction允许过滤相关实体。
var item = _Context.Order .IncludeFilter(x => x.Inner.Where(y => y.IsDeleted)) .IncludeFilter(x => x.Inner.Where(y => y.IsDeleted).Select(y => y.first)) .IncludeFilter(x => x.Inner.Where(y => y.IsDeleted).Select(y => y.second)) .Where(x => ( !(x.IsDeleted) && (x.IsActive) && (x.itemid == id))).FirstOrDefault();
注意:您不能混用Include和IncludeFilter。
Wiki: EF + Query IncludeFilter
编辑:回答子问题
但我们只能使用EF来实现这一点
是的,在我看来,我的图书馆使用类似的投影方案
var item = _Context.Order.Select(x => new { Order = x, Inner = x.Inner.Where(y => y.IsDeleted), first = x.Inner.Where(y => y.IsDeleted).Select(y => y.first) second = x.Inner.Where(y => y.IsDeleted).Select(y => y.second) }) .Where(x => ( !(x.IsDeleted) && (x.IsActive) && (x.itemid == id))) .FirstOrDefault() .Select(x => x.Order) .FirstOrDefault();
注意:代码尚未经过测试
编辑:回答评论
我在EF Core中遇到过这个问题。 您是否还要在EF + Core版本中实现IncludeFilter
不幸的是,即使最新的EF Core
版本仍然存在投影问题并导致N + 1查询。 当新版本(稳定版或预发布版)不再出现此问题时,该function将可用。
上述就是C#学习教程:entity framework包括filter子集合分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1000046.html