1

假设我有一个名为 Storage 的表,其中包含此类记录

Item_Id      |  Date            |   Price
1            |  01/01/2011      |   50
1            |  03/26/2012      |   25  
2            |  04/21/2012      |   20
3            |  08/02/2012      |   15
3            |  09/02/2012      |   13
4            |  10/02/2012      |   18

我想使用 linq to sql 获取 Item_Id 以及与之关联的最新日期(在这种情况下它将是“4”)。

我正在使用这个表达式

var lastDate= Storage
                    .GroupBy(s => s.Item_Id)
                    .Select(grp => new {
                      grp.Key,
                      LastDate = grp.OrderByDescending(
                             x => x.Date).First()
                    }).ToList();

我得到一个列表,其中包含每个 item_Id 的最新日期。所以下一步将是获得所有这些中最高的,但我被困在那里。

实际上,最终我需要跳过查询中的一些 Item_Id,但我想我可以在 Select 之前添加一个 where,例如 Where(s => s.Item.Id {这里是一个表达式检查它是否在我通过的列表中)。

我会很感激任何提示,

谢谢

4

2 回答 2

2

这对您的需要有用吗?

var highestDateID = Storage.OrderByDescending(x => x.Date).Select(x => x.Item_Id).FirstOrDefault();
于 2012-08-01T23:45:29.183 回答
1

为什么不

var lastDateId = Storage
  .GroupBy(s => s.Item_Id)   
  .Select(grp => new { Id = grp.Key, LastDate = grp.Max(x=>x.Date) })
  .OrderBy(o=>o.LastDate).Take(1).Id;

甚至

var lastDateId = Storage.OrderByDescending(o=>o.LastDate).Take(1).Id;

如果你需要完整的记录

var record = Storage
  .Where(w=>w.Id == Storage.OrderByDescending(o=>o.LastDate).Take(1).Id)
  .First();
于 2012-08-01T23:51:27.077 回答