Linq选择最新记录

Tom*_*len 9 c# linq

我有数据结构

在此输入图像描述

对于每个项目,在每种货币的特定日期都有一个价格记录.我需要创建一个返回每种货币最新价格的查询.

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

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

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

谢谢你的帮助!

Jon*_*Jon 33

这应该工作:

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 });
Run Code Online (Sandbox Code Playgroud)

说明:

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