Linq Где Содержит ... Сохранить порядок по умолчанию - PullRequest
6 голосов
/ 29 декабря 2011

У меня есть коллекция идентификационных номеров, для которых я хочу вернуть какой-то объект, я делаю это с помощью оператора linq с оператором where, где используется оператор содержимого:

var recentCats = (from i in EntityCache.Default.GetAll<Categories>()
                          where WebProfile.Current.RecentlyCreatedCategories.Contains(i.Id)
                          && BoundCategory.ParentItemClass.Id.Equals(i.ParentItemClass.Id)
                          select new CategoryInfo()
                          {
                              Category = i,
                              ClassId = i.ParentItemClass.Id,
                              ClassImage = NamedResourceManager.GetResourceBinary(i.ParentItemClass.NameResourceId)
                          });

Это прекрасно работаетхорошо, за исключением того, что я хочу сохранить порядок элементов в возвращенной коллекции таким же, как они были в списке, который входит. Так, например, если у меня был список идентификаторов: 14, 603, 388, я хочу объекты, которыевозвращаться в том же порядке, а не в том порядке, в котором они возвращаются кешем.Есть ли способ сделать это в рамках сущностей или любой другой способ, который не требует от меня написания цикла foreach?

Спасибо

Ответы [ 2 ]

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

Расширение Where Linq, как и в большинстве расширений, поддерживает исходный порядок списка.

Поддерживают ли перечисляемые методы LINQ относительный порядок элементов?

ПокаВы не будете явно переупорядочивать или использовать оператор, который естественным образом изменил бы порядок оригинального списка, должен быть сохранен.Очевидно, что переупорядочение списка для оператора where будет ненужным.


Причина, по которой приведенная выше информация не относится к этому вопросу, приведена в комментариях ниже.Я бы предложил изменить вывод select на пару ключ / значение, где ключ - это индекс идентификатора в вашем списке, а значение - ваш новый объект, затем orderBy ключ в результирующем наборе и выберитезначение.

1 голос
/ 30 декабря 2011

Для всех, кто заинтересовался, я смог заставить их выйти в том же порядке, что и список, присоединившись к ним, как упомянуто Рэем в комментариях выше.

var recentCats = (from i in WebProfile.Current.RecentlyCreatedCategories
                              join b in allCats
                                on i equals b.Id
                              where BoundCategory.ParentItemClass.Id.Equals(b.ParentItemClass.Id)
                              select ...

Еще раз спасибо за вашу помощь и ответы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...