我在数据库中有一个通过Entity Framework查询访问的设置表。 设置具有复合键:类别,组,名称,目标,已修改。 设置显然还包含非关键字段,如值。
我如何编写一个查询,为我提供相同的(类别,组,名称,目标)中的最新设置?
更具体地说,我想要所有最新的设置实体,包括与特定类别,组,目标组合相匹配的非关键字段。
例如:为类别为“数据库”且组为“超时”的所有目标提供所有最新设置。
这可以分两步完成,初始查询返回匹配条件的所有[Category,Group,Name,Target,Modified]键,然后循环查询每个键的设置,但这会产生大量的数据库查询,创造开销。
如果我想最小化框架执行的SQL数据库查询的数量,我将如何使用LINQ?
答案 0 :(得分:3)
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();
答案 1 :(得分:1)
尝试使用以下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();