期间是一个集合,其中包含每个期间的属性“ periodStart ”和“ periodEnd ”。 我需要按每个Period的最后一个'periodEnd'的值来排序网格。
我认为下面的代码可行,...
var result = from sched in schedles
orderby sched.Periods.Last().periodEnd descending
select new Grid
{
ID = sched.ID,
Name = sched.Name
};
但我收到了错误 - >
消息:LINQ to Entities无法识别方法'... Last [Period](System.Collections.Generic.IEnumerable`1 [... Period])' 方法,此方法无法转换为商店表达式。
我确信对于更高级的开发人员来说这是一个简单的问题,但我知道我缺少一些理解。 提前感谢任何能帮助我理解这个orderby声明的局限性的人。
答案 0 :(得分:4)
有许多常见的LINQ方法not supported by LINQ to Entities。 Last()
就是其中之一。如果您使用First()
,则会获得
方法'First'只能用作最终查询操作。
所以你应该做
orderby sched.Periods.OrderByDescending(p => p.periodEnd)
.FirstOrDefault().periodEnd
您必须通过某个属性订购Period
来告诉EF“第一”是什么。您可以使用FirstOrDefault()
而不用防止空引用异常,因为整个表达式都被转换为SQL。它不是作为内存LINQ执行的。
答案 1 :(得分:0)
如果我理解你的问题,我相信这会得到你想要的结果:
var result = schedles.OrderByDescending(x => x.periodEnd).Select(new Grid
{
ID = sched.ID,
Name = sched.Name
});