简体   繁体   中英

Linq to select latest records

I have the data structure

在此处输入图像描述

For each item there is a record of it's price on a certain date in each currency. I need to create a query that returns the most current price for each currency.

This query works, but returns multiple Amounts for currency ID 1 . It should only return 3 records, 7,8 and 9 as these represent the most up to date prices in all currencies for this item.

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

Please ignore all ordering and assume that records are randomly ordered.

This should work:

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 });

Explanation:

  1. Select rows for the specific ItemID
  2. Group by CurrencyID
  3. From within each currency group select the row that has the most recent date (leaving one row for for each CurrencyID in the result set)
  4. Pull out the information you want from these rows

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM