Linq选择最新记录

时间:2012-04-05 10:20:29

标签: c# linq

我有数据结构

enter image description here

对于每件商品,每种货币的特定日期都有一份价格记录。我需要创建一个返回每种货币最新价格的查询。

此查询有效,但会为货币ID Amounts返回多个1。它应该只返回3条记录7,8 and 9,因为它们代表此商品所有货币的最新价格。

var q = (from c in db.tblStoreItemPrices where c.ItemID == ID select new { c.CurrencyID, c.Amount });

请忽略所有排序并假设记录是随机排序的。

感谢您的帮助!

1 个答案:

答案 0 :(得分:31)

这应该有效:

db.tblStoreItemPrices
    .Where(c => c.ItemID == ID)
    .GroupBy(c => c.CurrencyID)
    .Select(g => g.OrderByDescending(c => c.Date).First())
    .Select(c => new { c.CurrencyID, c.Amount });

说明:

  1. 选择特定ItemID的行
  2. 按CurrencyID分组
  3. 从每个货币组中选择具有最新日期的行(为结果集中的每个CurrencyID留下一行)
  4. 从这些行中提取您想要的信息