【问题标题】:LINQ to get array of newest items in arrayLINQ获取数组中最新项目的数组
【发布时间】:2021-06-02 10:06:58
【问题描述】:

我有一个像这样的对象的列表:

public class ReportViewModel
{
    public string DocumentName { get; set; } = string.Empty;
    public DateTime? DocumentDate { get; set; }
    public string DocumentTypeName { get; set; } = string.Empty;
}

我想获得不同的对象列表,其中我将根据文档类型获取最新文档,并且只获取每种类型的最新文档。该api当前返回带有文档的列表,它可能来自相同文档类型但来自不同日期的文档,我怎样才能只获取每种文档类型的最新文档?

【问题讨论】:

    标签: c# linq linq-to-entities linq-to-objects


    【解决方案1】:

    您需要同时使用GroupByFirstOrDefault

    假设你有

      Name              DocumentDate      DocumentTypeName   
    -------------------------------------------------------
     Document A-1        2021-05-01          A          
     Document A-2        2021-04-28          A
     Document B-1        2021-05-01          B          
     Document B-2        2021-04-28          B
     Document C-1        2021-05-01          C          
     Document C-2        2021-04-28          C
     Document C-3        2021-04-25          C
    

    那么你需要做的是

     var groupedList = reportViewModelList.GroupBy(i => i.DocumentTypeName)
                    .Select(i => i.OrderByDescending(o => o.DocumentDate).FirstOrDefault());
    

    它按预期为您提供以下结果。

      Name              DocumentDate      DocumentTypeName   
    -------------------------------------------------------
     Document A-1        2021-05-01          A
     Document B-1        2021-05-01          B
     Document C-1        2021-05-01          C
    

    见:How to get first record in each group using Linq

    【讨论】:

      【解决方案2】:

      您可以使用以下代码按上次创建时间区分元素:

      using (var db = new YourDocumentDbContext())
      {
      var documents = db.Documents.AsEnumerable().GroupBy(a => a.DocumentTypeName).Select(a => a.OrderByDescending(a=>a.createdTime).FirstOrDefault());
      }
      

      【讨论】:

      • 它与“如何才能从每种文档类型中仅获取最新文档”这个问题有什么联系?
      • 好的,很抱歉这个答案。代码块返回一个列表。条目中的行已修改。
      猜你喜欢
      • 2021-04-22
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      • 1970-01-01
      • 2019-10-11
      • 2016-03-13
      • 1970-01-01
      相关资源
      最近更新 更多