簡體   English   中英

Linq查詢以基於日期排序列表並獲得不同

[英]Linq query to order a list based on date and get distinct

我有一個列表,如下所示:

List<MyObjects> list:
list[0] - Id: 1; RefId:101; Date:22/06/2016
list[1] - Id: 2; RefId:102; Date:24/06/2016
list[2] - Id: 3; RefId:101; Date:26/06/2016
list[3] - Id: 4; RefId:103; Date:28/06/2016

我需要一個linq查詢,它基於具有最新日期的RefId來使我與眾不同,如下所示:

List<MyObjects> newList:
list[0] - Id: 3; RefId:101; Date:26/06/2016
list[1] - Id: 2; RefId:102; Date:24/06/2016
list[2] - Id: 4; RefId:103; Date:28/06/2016

在此重復RefId-101,但其第一個日期值較舊,因此將其刪除。 提前致謝。

使用Linq按RefId分組,然后按Date對每個分組排序,然后從每個分組中取出第一個:

list.GroupBy(x => x.RefId).Select(x => x.OrderByDescending(y => y.Date).FirstOrDefault());

或使用查詢語法:

List<MyObjects> results = (from x in list
                            group x by x.RefId into grp
                            select grp.OrderByDescending(y => y.Date).FirstOrDefault()
                            ).ToList();

您可以使用GroupByRefId進行分組,然后按Date對這些分組進行排序,並采用第一個分組:

var result = list.GroupBy(o => o.RefId)
      .Select(g => g.OrderByDescending(gx => gx.Date).First())
      .ToList();

由於您需要最新的 Date ,因此需要OrderByDescending

我認為最好避免調用.FirstOrDefault() 這是一個替代方案:

var newList =
    list
        .GroupBy(x => x.RefId)
        .SelectMany(x => x.OrderByDescending(y => y.Date).Take(1))
        .ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM