假设我有一个名为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与最新的Date相关联(在这种情况下,它将是“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(s => s.Item.Id {和这里有一个表达式,用于检查它是否在我传递的列表中。
我很感激任何提示,
由于
答案 0 :(得分:2)
这是否适合您的需要?
var highestDateID = Storage.OrderByDescending(x => x.Date).Select(x => x.Item_Id).FirstOrDefault();
答案 1 :(得分: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();