LINQ 子选择在具有组合键的表中

本文关键字:组合 选择 LINQ | 更新日期: 2023-09-27 17:56:20

我在数据库中有一个通过实体框架查询访问的设置表。这些设置具有组合键:"类别"、"组"、"名称"、"目标"、"已修改"。这些设置显然还包含非键字段,如值。

如何编写查询,为我提供相同设置(类别、组、名称、目标)中的最新设置?

更具体地说,我想要与特定类别、组、目标组合匹配的所有最新设置实体,包括非关键字段。

例如:为类别为"数据库"和"组"为"超时"的所有目标提供所有最新设置。

这可以通过两步完成,初始查询返回与条件匹配的所有 [类别、组、名称、目标、修改] 键,然后循环查询每个键的设置,但这会产生大量数据库查询,从而产生开销。

如果我想最大程度地减少框架执行的 SQL 数据库查询数,我将如何使用 LINQ 执行此操作?

LINQ 子选择在具有组合键的表中

var query = from s in db.Settings
            group s by new
            {
              s.Category,
              s.Group,
              s.Name,
              s.Target,
            } into sg
            select new
            {
              Setting = sg.OrderByDescending(r => r.Modified).FirstOrDefault()
            };

编辑 - 如果要返回设置列表

 List<Setting> list = (from s in db.Settings
                       group s by new
                       {
                         s.Category,
                         s.Group,
                         s.Name,
                         s.Target,
                       } into sg
                       select sg.OrderByDescending(r => r.Modified).FirstOrDefault()
                      ).ToList();

尝试使用以下 LINQ 语句。

        List<Settings> latestSettings = 
            db.Settings.OrderByDescending(x => x.Modified).GroupBy(x => new {x.Category, x.Group, x.Name, x.Target}, x => x)
            .Select(result => result.FirstOrDefault())
            .ToList();