OrderBy与条件的关系的子集

时间:2013-09-10 14:37:19

标签: c# linq entity-framework linq-to-entities entity-framework-5

我正在尝试按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

3 个答案:

答案 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)));