LINQ在表中使用复合键进行子选择

我在数据库中有一个通过Entity Framework查询访问的设置表。 设置具有复合键:类别,组,名称,目标,已修改。 设置显然也包含非关键字段,如值。

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

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

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

这可以分两步完成,初始查询返回匹配条件的所有[Category,Group,Name,Target,Modified]键,然后循环查询每个键的设置,但这会产生大量数据库查询,创造开销。

如果我想最小化框架执行的SQL数据库查询的数量,我将如何使用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 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 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();