2014-04-30 42 views
0

我與一組LINQ查詢掙扎選擇從分組LINQ查詢基於條件的單個項目

我有這樣的:

DateTime dateFrom = new Date(2014,8,2); 
var GroupedPrices = Prices.Where(p => p.ArrivalDateFrom <= dateFrom 
        && 
        p.ArrivalDateTo > dateFrom) 
        .GroupBy(p => p.ItemID); 

我試圖讓每個ID的單件價格 - 例如。根據該價格的最新ValidFrom日期計算每個組中的/來自哪個組。 我已經開始將它們按其ItemID(而不是單個價格記錄ID)進行分組,但我正努力根據最新的ValidFrom日期來確定如何只抓取一個。我以爲我可以分組前預訂他們,但不知道分組已完成後,將堅持..即

期待它會使用Max(x=>x.ValidFrom)類型的事情或OrderByDescending(x=>x.ValidFrom).First(),但不能工作了這一點

任何幫助非常感謝

感謝

+0

是ID的唯一嗎?如果他們是,分組他們不會很好 – Jonesopolis

+0

他們不是,這是所有項目的價格表,我會打電話給那個項目編號要更清楚 – nat

回答

1

認爲你只需要選擇你想要的東西,到了最後,像這樣:

DateTime dateFrom = new Date(2014,8,2); 
var GroupedPrices = Prices 
    .Where(p => p.ArrivalDateFrom <= dateFrom && p.ArrivalDateTo > dateFrom) 
    .GroupBy(p => p.ItemID) 
    .Select(g => new{ ItemId = g.Key, NewestPrice = g.OrderByDescending(p => p.ValidFrom).First() }); 
+0

感謝您的答覆,但我得到{ 「方法'First'只能用作最終的查詢操作,請考慮在這個例子中使用'FirstOrDefault'方法。」} - 我只需要每個組中具有最新ValidFrom日期 – nat

+0

我的壞的整個價格對象通過設置FirstOrDefault()可以工作。非常感謝 – nat