【问题标题】:Entity Framework query to fetch the latest version from table实体框架查询以从表中获取最新版本
【发布时间】:2020-02-26 21:59:23
【问题描述】:

我的数据库中有这张表:

   Id  Name    Version    AddedDate
   1   Table    1         2020-02-26 15:25:04.5366703
   2   Table    1         2020-02-26 15:25:01.8502928
   3   Table    2         2020-02-26 15:18:09.0415632
   4   Table    2         2020-02-26 15:18:23.6646620
   5   Chair    1         2020-02-26 15:16:25.7518968
   6   Chair    1         2020-02-26 15:18:49.1826797
   7   Chair    2         2020-02-26 15:24:41.0905596
   8   Chair    2         2020-02-26 15:24:37.4333049

我已经尝试过这个 SQL 查询,它可以部分工作,但我需要包括 id 在内的整行,如果我将 Id 添加到选择中,它会失败。

我需要编写一个实体框架查询,使得结果有最后添加的表 1、表 2、椅子 1、椅子 2

SELECT [Name],[Version], MAX(AddedDate) as AddedDate
From JsonSchemas
GROUP BY Name, Version
ORDER BY MAX(AddedDate) DESC

【问题讨论】:

  • 你试过什么? StackOverflow 是针对人们使用自己的解决方案而不是从其他人那里寻找解决方案所面临的问题的问答。开始调查此类问题的一种选择是 Linq 的 GroupByOrderByDescending
  • 通常这种事情是用'Rank'stackoverflow.com/questions/20953645/…完成的

标签: c# entity-framework asp.net-core


【解决方案1】:

你可以试试这个代码:

var result = (from item in _dbContext.JsonSchemas.ToList()
                 group item by new { item.Name, item.Version } into r
                 select new
                 {
                     Id = r.Select(q => q.Id).First(),
                     Name = r.Key.Name,
                     Version = r.Key.Version,
                     AddedDate = r.Max(q => q.AddedDate)
                 }).ToList();

【讨论】:

    【解决方案2】:

    您可以按名称和版本进行分组,并通过在 AdditionalDate 上排序来获取最近的 AdditionalDate,如下所示:

    var lst = dbContext.JsonSchemas.GetAsNoTracking()
                    .GroupBy(a => new {a.Name, a.Version})
                    //.ToList()
                    .Select(g => g.OrderByDescending(t => t.AddedDate).FirstOrDefault())
                    .ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多