У меня есть две коллекции IEnumerable, которые я хотел бы объединить.
Один выбирает объекты новостей, которые связаны с определенной категорией. Когда пользователь выполняет фильтрацию по категории, я также хотел бы, чтобы новостные статьи, которые были отмечены другой категорией, отображались.
Итак, у меня есть другой запрос, который возвращает новостные объекты, помеченные определенной подкатегорией.
Теперь я хотел бы объединить две коллекции, удалив дубликаты (поскольку новостная статья, связанная с основной категорией, также может быть помечена второй категорией).
var catNews = model.Category.News.SelectMany(n => n.News); //get news article associated to the category
var tagNews = _nr.GetNews(model.Category.relatedCategoryName); //this selects news by tags - which I want as the related category name
model.News = catNews.Union(tagNews).OrderByDescending(p => p.Date); //union the two collections
Тем не менее, model.News теперь содержит две идентичные новостные статьи, и я не уверен, почему в качестве union следует использовать компаратор равенства по умолчанию?
Я что-то здесь не так делаю? Я использую EF Code First, и мой первичный ключ - идентификатор новостей.
Я обошёл эту проблему, передав список идентификаторов catNews функции GetNews и исключив их
if (excludeIds != null)
q = q.Where(n => !excludeIds.Contains(n.ID));
Но я не уверен, зачем мне это, когда я думал, что union удалит идентичные статьи?