我正在尝试按Foo
对没有Bars.Max(Date)
的{{1}}子集点Bars
。
在文本中很难解释,所以这是我到目前为止的查询。
Optional
该查询失败并显示// Foos is of type DbSet<Foo> a "code first" EF entity
Foos.OrderBy(f => f.Bars
.Where(b => b.Optional == null)
.Max(b => b.Date));
无法比较类型的元素 'System.Collections.Generic.ICollection`1'。只有原始类型, 支持枚举类型和实体类型。
模型
NotSupportedException
答案 0 :(得分:1)
Bar.Optional
是一个集合,而不是一个参考。您无法将带有null
的集合与LINQ到实体进行比较。相反,您必须根据Bars
集合 (Optional
)任何元素所在的!
进行过滤:
Foos.OrderBy(f => f.Bars
.Where(b => !b.Optional.Any())
.Max(b => b.Date));
您可能必须使用Max(b => (DateTime?)b.Date)
而非Max(b => b.Date)
来说明Bars
Foo
的{{1}}集合可能为空的可能情况没有最大Date
。我不是百分百肯定的。您应该明确地测试空Bars
集合的大小写。
答案 1 :(得分:0)
Foo.OrderBy(f => f.Bars
.Where(b => b.Optional == null).AsEnumerable().
.Max(b => b.Date));
答案 2 :(得分:0)
鉴于你的Foo是Foos的集合,试试这个
Foo.OrderBy(f =>f.Bars.Where(x => x.Optional == null)
.Max(x => x.Date)));