我需要从Item表中获取具有最新DateEffective的所有不同记录,其中DateDeleted为null并按ItemNumber排序。
Id ItemNumber Name Price DateEffective DateDeleted
1 1001 Cat 1 2014-02-14 null
2 1002 Dog 3 2014-02-14 null
3 1001 Cat 2 2014-02-20 null
到目前为止,我已经获取了所有未删除的记录,但是由于引入了ItemNumber,从而可能重复,我不能再这样做了。
context.Items.Where(i => i.DateDeleted == null).ToList();
查询应该返回第二个和第三个记录,但不是第一个记录,因为它是第三个记录的旧版本。
另外,我已经阅读了有关将时态数据放在单独表格中的建议。与上面的例子相比,这样做有什么好处?在这种情况下,Name,Price和DateEffective将成为时态表的候选者。
谢谢。
答案 0 :(得分:3)
这样可行
context.Items.Where(i => i.DateDeleted == null)
.GroupBy(x => x.ItemNumber)
.Select(g => g.First(x => x.DateEffective == g.Max(y => y.DateEffective))
.OrderBy(x => x.ItemNumber)
.ToList();