LINQ 子选择在具有组合键的表中
本文关键字:组合 选择 LINQ | 更新日期: 2023-09-27 17:56:20
我在数据库中有一个通过实体框架查询访问的设置表。这些设置具有组合键:"类别"、"组"、"名称"、"目标"、"已修改"。这些设置显然还包含非键字段,如值。
如何编写查询,为我提供相同设置(类别、组、名称、目标)中的最新设置?
更具体地说,我想要与特定类别、组、目标组合匹配的所有最新设置实体,包括非关键字段。
例如:为类别为"数据库"和"组"为"超时"的所有目标提供所有最新设置。
这可以通过两步完成,初始查询返回与条件匹配的所有 [类别、组、名称、目标、修改] 键,然后循环查询每个键的设置,但这会产生大量数据库查询,从而产生开销。
如果我想最大程度地减少框架执行的 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<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();