获取具有最新生效日期的不同记录,按编号排序

时间:2014-02-14 12:07:36

标签: c# entity-framework lambda

我需要从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将成为时态表的候选者。

谢谢。

1 个答案:

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