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

时间:2011-05-12 14:39:56

标签: c# sql linq entity-framework linq-to-entities

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

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

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

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

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

如果我想最小化框架执行的SQL数据库查询的数量,我将如何使用LINQ?

2 个答案:

答案 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();