首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用立即加载对父集合和所有子集合排序的EF4 LINQ (.Include())

使用立即加载对父集合和所有子集合排序的EF4 LINQ (.Include())
EN

Stack Overflow用户
提问于 2010-11-12 00:54:35
回答 1查看 3.7K关注 0票数 4

我正在网格上执行分层数据绑定,并且我需要让数据库服务器对我的对象执行排序。我可以很容易地对父集合进行排序,但是我似乎不知道如何对所有子集合进行排序。我有一个模型,它的子集合嵌套了3层,所有这些集合都需要排序。

下面是我试图实现的一个示例模型:

代码语言:javascript
复制
    public class Year
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Make> Makes { get; set; }
}
public class Make
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Model> Models { get; set; }
}
public class Model
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Color> Colors { get; set; }
}
public class Color
{
    public int Id { get; set; }
    public string Name { get; set; }
}

我正在尝试加载"Year“对象的列表。这有一个Makes的集合,它有一个模型的集合,其中有一个颜色的集合。我需要根据它们的name属性对所有这些对象进行排序。

我尝试过这样做:

代码语言:javascript
复制
            List<Year> years = db.Years.OrderBy("it.Name")
                                   .Include("Makes").OrderBy("it.Name")
                                   .Include("Makes.Models").OrderBy("it.Name")
                                   .Include("Makes.Models.Colors").OrderBy("it.Name")
                                   .ToList();

而是“它”仅为从中选择的表的别名...在这种情况下是“年”。有没有办法为子表创建一个别名,这样我也可以在一个查询中对它们进行排序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-12 01:22:53

如果您需要对内部导航属性(例如模型)进行排序或过滤,那么您不能再使用Include方法立即加载它们。相反,您可以像这样使用:

代码语言:javascript
复制
List years = db.Years.OrderBy("it.Name").ToList();
foreach(year in years) 
{
    var makesQuery = year.Makes.CreateSourceQuery().OrderBy(m => m.Name);
    year.Makes.Attach(makesQuery);  

    foreach(make in year.Makes) 
    {
        var modelsQuery = make.Models.CreateSourceQuery().OrderBy(m => m.Name);
        make.Models.Attach(modelsQuery);

        foreach(model in make.Models) 
        {
            var colQuery = model.Colors.CreateSourceQuery().OrderBy(c => c.Name);
            model.Models.Attach(colQuery);        
        }
    }
}

这样,years对象的所有导航属性都将被排序。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4156949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档