我想在以下示例中调用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();
}
问题是这不是按照阿尔法的顺序对标签进行排序。我错过了什么?
答案 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