Упорядочить по Entity Framework Загрузить - PullRequest
3 голосов
/ 02 декабря 2011

Я хотел бы добавить заказ, когда я звоню Load() в следующем примере:

(Примечание: у этого объекта есть статья 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 ]

3 голосов
/ 02 декабря 2011

Вы никому не присвоили tags.OrderBy (), установите его в другую переменную и выполните итерации по этому, например,

var orderedTags = tags.OrderBy(t => t.name)
...
foreach(var tag in orderedTags) {
....
}
2 голосов
/ 02 декабря 2011

Как и большинство других методов LINQ, OrderBy не влияет на базовый запрос, который является неизменным. Вы должны сделать что-то с возвращаемым значением:

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

Проблема в том, что tags не является IEnumerable или IQueryable: это EntityCollection. Таким образом, приведенное выше заявление не будет работать очень хорошо. Кроме того, имя вашего метода (GetTags) не очень хорошо указывает на то, что вы собираетесь изменять порядок тегов на объекте Article, поэтому лучше оставить локальный OrderBy, и делайте это снова каждый раз, когда кто-то звонит GetTags:

    var tags = this.Article.tags;
    if (!tags.IsLoaded && this.Article.EntityState != EntityState.Detached)
    {
        tags.Load();
    }

    return string.Join(" ", tags.Select(t => t.name).OrderBy(t => t))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...