16

我有数据结构

在此处输入图像描述

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

此查询有效,但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 });

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

4

1 回答 1

44

这应该有效:

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. 从这些行中提取您想要的信息
于 2012-04-05T10:35:32.493 回答