2014-02-14 36 views
0

我需要從具有最新DateEffective的項目表中獲取所有不同的記錄,其中DateDeleted爲null並按ItemNumber排序。獲取與最新生效日期不同的記錄,按編號排序

Id  ItemNumber  Name  Price  DateEffective  DateDeleted 
1   1001  Cat   1  2014-02-14   null 
2   1002  Dog   3  2014-02-14   null 
3   1001  Cat   2  2014-02-20   null 

到現在爲止,我已經取所有非刪除記錄,但由於引入ItemNumber,並由此可以重複的,我不能這樣做了。

context.Items.Where(i => i.DateDeleted == null).ToList(); 

查詢應返回第二個和第三個記錄,但不是第一個,因爲它是第三個記錄的較早版本。

此外,我已閱讀關於將時態數據放入單獨表中的建議。與上面的例子相比,這樣做的好處是什麼?在這種情況下,Name,Price和DateEffective將成爲臨時表的候選人。

謝謝。

+0

檢查這個http://stackoverflow.com/questions/2328917/linq-distinct-query – shingonati0n

回答

3

這會工作

context.Items.Where(i => i.DateDeleted == null) 
     .GroupBy(x => x.ItemNumber) 
     .Select(g => g.First(x => x.DateEffective == g.Max(y => y.DateEffective)) 
     .OrderBy(x => x.ItemNumber) 
     .ToList(); 
+0

謝謝,但我得到以下錯誤: 「的方法, '第一'只能用作最終查詢操作,請考慮在此實例中使用方法'FirstOrDefault'。「 – Lahey

+0

@Lahey okey然後嘗試FirstOrDefault而不是第一個 –

+0

我做了,但我得到了以下內部異常: 「{」不支持APPLY連接「}」 – Lahey

相關問題