重新排列LINQ中的子句
本文关键字:LINQ 子句 排列 新排列 | 更新日期: 2023-09-27 17:59:54
叹息。。。在我的墓碑上,它会写着"Died adding one more clause to a LINQ query"
所以我有以下内容:
var validStatuses = new[] {
"Assigned", "Donor Called", "Dispatched", "Waiting",
"Title Rec'd", "Sending Title", "Cancelled", "Waiting"};
var ud = db.Updates
.Where(c => !c.Sold && validStatuses.Contains(c.Status))
.GroupBy(c => c.Vehicle)
.Select(x => x
.OrderByDescending(y => y.TimeStamp)
.First())
.ToList();
我已经意识到我需要在日期之后有Contains子句。换句话说,只有当最近的条目包含"validStatus"时,我才需要选择最近的条目。现在,只要每个条目都包含"validStatus",它就会返回多个条目。
我会非常感激你的帮助。。。非常感谢。
正如您在问题中所建议的,只需将contains子句移到日期之后即可。
var ud = db.Updates
.Where(c => !c.Sold)
.GroupBy(c => c.Vehicle)
.Select(x => x
.OrderByDescending(y => y.TimeStamp)
.First())
.Where(c => validStatuses.Contains(c.Status));
此外,如果您计划在linq-to-entities查询中使用ud
,那么不要在最后将查询转换为列表。
我的理解是这是可行的(但我错过了最新的评论…):
var ud = db.Updates
.Where(c => !c.Sold)
.GroupBy(c => c.Vehicle, x => x, (x,gr) => new { key = x,
list = gr.ToList().OrderByDescending(z => z.TimeStamp).First() })
.Where(x=> validStatuses.Contains(x.list.Status))
.Select(x => x.list).ToList();
它是按车辆分组的,并且只保留最新项目具有有效状态的组。。。