如何在分组的Entity LINQ查询中包含相关对象?

时间:2011-05-16 08:44:34

标签: linq linq-to-entities

我有一些与SettingDescription相关的设置实体,它与SettingGroup相关。 通过将键的“已修改”字段部分保留来设置历史记录。 要获取与特定类别匹配的设置,请使用此查询(after help from here):

    var latestSettings =
        context.Settings.Include("Description.SettingGroup")
            .OrderByDescending(x => x.Modified)
            .GroupBy(x => 
                new { 
                    x.Category, 
                    x.Group, 
                    x.Name, 
                    x.Target }, x => x)
            .Where(x => x.Key.Category == category)
            .Select(result => result.FirstOrDefault())
            .ToArray();

这将返回一组最新设置,但完全忽略“包含”部分。但是,我可以通过运行第二个虚拟查询来强制加载描述,该查询将描述加载到上下文中。

    var latestSettings =
        context.Settings.Include("Description.SettingGroup")
            .OrderByDescending(x => x.Modified)
            .GroupBy(x => 
                new { 
                    x.Category, 
                    x.Group, 
                    x.Name, 
                    x.Target }, x => x)
            .Where(x => x.Key.Category == category)
            .Select(result => result.FirstOrDefault())
            .ToArray();
    var settingDescriptions = 
        context.SettingDescriptions.Include("SettingGroup")
               .Where(x => x.Category == category)
               .ToArray();

为什么在“独立”群组查询中忽略了包含?

我可以将设置和描述加载合并到一个查询中吗?

1 个答案:

答案 0 :(得分:0)

来自EF团队的AlexJ发布了一系列精彩提示,包括:

“提示22 - 如何使包括真正包含”
http://blogs.msdn.com/b/alexj/archive/2009/06/02/tip-22-how-to-make-include-really-include.aspx

在我看来,您的查询返回“设置”实体(没有“更改形状”),因此此提示应适用。