c# - Linq where 集合上的条件(导航属性)
问题描述
我一直在筛选几个帖子,但似乎没有一个答案有效或不适用于我的情况,也许我正在监督一些事情......
我有一个实体 Yogi,它有一个订阅集合(也是一个实体)。我想检索一个瑜伽士,但只包括特定日期之后的订阅。
我尝试了以下方法(也用 Select 替换了(第二个)Where):
ctx.Yogis.Where(y => y.YogiId == id)
.Include(y => y.Subscriptions.Where(s=> s.YogaClassDate.Date >= DateTime.Now.Date))
.Include("Subscriptions.YogaClass")
.FirstOrDefault();
但结果收到此错误:
包含路径表达式必须引用在类型上定义的导航属性。对引用导航属性使用虚线路径,对集合导航属性使用 Select 运算符。
如果可能的话,我想避免之后必须进行迭代和比较,所以有什么方法可以直接得到这个,或者像其他人建议的那样,没有,我应该得到那个 Yogi 的所有订阅的集合并过滤掉那些我不想显摆?
提前感谢您的任何建议或指示!
编辑(谢谢格特阿诺德): 我尝试了匿名投影,但我错过了一个关键部分
.AsEnumerable()
.Select(x => x.b)
所以这使它工作:
ctx.Yogis.Where(y => y.YogiId == id)
.Select(y => new
{
y,
Subscriptions = y.Subscriptions.Where(s=> s.YogaClassDate >= DateTime.Now)
})
.AsEnumerable()
.Select(x => x.y)
.ToList();
解决方案
试试看:
ctx.Yogis.Where(y => y.YogiId == id)
.Include(y => y.Subscriptions)
.Include("Subscriptions.YogaClass").Where(s=> s.Subscriptions.YogaClassDate.Date >= DateTime.Now.Date)
.FirstOrDefault();
推荐阅读
- design-patterns - 责任链模式与迭代策略列表
- python - Python线性回归sklearn库和直接数学方法给出不同的R平方值
- amazon-web-services - 如何从我的 springboot 应用程序的 Docker 映像连接到 Amazon RDS 实例?
- java - 从对象列表中获取属性的聚合列表(Java 8)
- javascript - afterAll ReferenceError 中抛出错误:未定义模块,nodejs 中的 Karma/Jasmine 测试错误
- java - 使用 WebDriverManager 时如何设置 Chrome 选项?
- scrapy - 如何从scrapy splash的响应中获取cookie
- flutter - 如何使用 Where 条件从数据库中选择行数?
- javascript - 如何使图片增长(HTML/Javascript)?
- redux - 使用 redux-starter-kit 的 configureStore() 设置 saga 中间件