Linq集团选择

时间:2013-11-25 16:46:56

标签: c# sql 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
  6. 第2组:

    1. 记录1
    2. 记录2
    3. 记录3
    4. 记录4
    5. 我需要:

      第1组:

      1. 记录1
      2. 记录5
      3. 第2组:

        1. 记录1
        2. 记录4

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

您可以使用lastfirst方法

答案 2 :(得分: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;
           });

如果您使用的是Entity Framework,请在选择之前使用 AsEnumerable()

希望这会有所帮助!!