Я прочитал this вопрос о сохранении заказа в списке, но я ничего не видел в использовании метода .Contains()
, поэтому я задаю этот вопрос.Сохранение заказа с использованием LINQ с использованием .Contains
Я создал класс-оболочку, которая может содержать различные объекты, как показано ниже:
public class RecommenderItem
{
public Guid Id { get; set; }
public object Entity { get; set; }
}
У меня есть метод, который упорядочивает список, независимо от типа объекта. Прежде чем я вызову метод, который заказывает этот список, я извлекаю объекты из своей базы данных и сопоставляю их с RecommenderItem
. После того, как этот список упорядочен, я хочу вернуть эти элементы в качестве их исходного типа.
Я успешно сделал это, но для удобства чтения я хотел бы использовать LINQ во всем моем методе. В настоящее время, я устанавливаю мой список вывода, как это:
var filteredOnContent = ContentBasedFilter.FilterBasedOnContent(ratedItems, itemsNotReviewed); //This is the function which orders the list. Both ratedItems and itemsNotReviewed are lists of RecommenderItems
var restaurantObjects = (from S1 in filteredOnContent
from S2 in restaurantsCloseToUser
where S1.Id == S2.Id
select S2).ToList();
В этом примере restaurantsCloseToUser
список, который был получен из базы данных.
Я пробовал следующее, но не сохраняет порядок в списке фильтров. Это очень важно, так как список - это 10 лучших рекомендаций.
var test = restaurantsCloseToUser.Where(x => contentBasedFiltered.Select(r => r.Id).Contains(x.Id)).ToList();
Есть ли способ, которым я могу использовать LINQ и сохранить порядок отфильтрованного списка?
Пожалуйста, дайте мне знать, если мне нужно предоставить дополнительную информацию!
'test' в том же порядке, что и нефильтрованные' рестораныCloseToUser'. Вам нужен порядок 'contentBasedFiltered' вместо этого? – dasblinkenlight
Что такое запрос 'filterOnContent'? Запрос упорядочен? Я не вижу причины, почему заказ должен измениться, так как вы просто добавляете еще один фильтр ... –
Единственное, что может «уничтожить» заказ, это «toDictionary» и «toLookup» или переопределение «order by». если вы хотите, чтобы порядок одного списка использовал его как «базу» и выберите элемент, который находится в другом. list.select ordre останется тем же –