2013-11-25 95 views
0

我需要過濾這些結果,只顯示每組的第一行和最後一行。我已經嘗試了一些沒有運氣的方法。以下是Linq查詢和結果。Linq組選擇

LINQ查詢:

var currentAndHistoricalOnly = ViewCustomerGLAndPurchaseRecord 
           .Where(g=>g.CashierDate > new Datetime(2012,10,01) 
             && g.CashierDate < new DateTime(2012,12,01)) 
           .GroupBy(x => x.TransactionId) 
           .OrderByDescending(d => d.First().CashierDate); 

This is the result after executing the linq query 記住,我試圖保持相同的分組,但過濾器(刪除記錄)各組,並採取僅在第一記錄各組的最後一個記錄。

因此,而不是:

組1:

  1. 記錄1
  2. 記錄2
  3. 記錄3
  4. 記錄4
  5. 記錄5

組2:

  1. 記錄1
  2. 記錄2
  3. 記錄3
  4. 記錄4

我需要:

組1:

  1. 記錄1
  2. 記錄5

組2:

  1. 記錄1
  2. 記錄4

回答

1

也許是這樣的:

var currentAndHistoricalOnly = ViewCustomerGLAndPurchaseRecord 
           .Where(g=>g.CashierDate > new DateTime(2012,10,01) && g.CashierDate < new DateTime(2012,12,01)) 
           .GroupBy(x => x.TransactionId) 
           .Select(g=> new { 
            Last = g.OrderByDescending(c=>c.CashierDate).FirstOrDefault(), 
            First = g.OrderBy(c=>c.CashierDate).FirstOrDefault(), 
           }) 
           .ToList(); 
+0

工作很好!!!謝謝。 – EdMore

+0

不客氣:) –

0

試試這個:

var list = ViewCustomerGLAndPurchaseRecord 
      .Where(g=>g.CashierDate > new DateTime(2012,10,01) 
        && g.CashierDate < new DateTime(2012,12,01)) 
      .GroupBy(x => x.TransactionId) 
      .OrderByDescending(d => d.First().CashierDate) 
      .Select(d => 
      { 
       var result = new List<ViewCustomerGLAndPurchaseRecord>(); 
       result.Add(d.FirstOrDefault()); 
       result.Add(d.LastOrDefault()); 
       return result; 
      }); 

如果您正在使用實體框架,之前選擇使用AsEnumerable()

希望這會有所幫助!