按实体框架加载排序

时间:2011-12-02 16:41:46

标签: c# entity-framework

我想在以下示例中调用Load()时添加一个orderby:

(注意:此对象有一篇已在其他地方加载的EF文章)

    private string GetTags()
    {
        var tags = this.Article.tags;
        if (!tags.IsLoaded && this.Article.EntityState != EntityState.Detached)
        {
            tags.Load();
            tags.OrderBy(t => t.name);
        }

        StringBuilder result = new StringBuilder();
        foreach (var tag in tags)
        {
            result.Append(tag.name).Append(" ");
        }
        return result.ToString();
    }

问题是这不是按照阿尔法的顺序对标签进行排序。我错过了什么?

2 个答案:

答案 0 :(得分:3)

您没有将tags.OrderBy()分配给任何内容,将其设置为另一个变量并对其进行迭代,例如

var orderedTags = tags.OrderBy(t => t.name)
...
foreach(var tag in orderedTags) {
....
}

答案 1 :(得分:2)

与大多数其他LINQ方法一样,OrderBy不会影响基础查询,这是不可变的。你必须对它返回的值做一些事情:

this.Article.tags = tags.OrderBy(t => t.name);

问题是,tags不是IEnumerable或IQueryable:它是一个EntityCollection。所以上述说法不会很好。此外,您的方法名称(GetTags)并不能很好地表明您将修改Article对象上的标记顺序,因此最好保留{ {1}}本地,每次有人拨打OrderBy时再次执行此操作:

GetTags