2015-05-28 5 views
-1

В настоящее время я работаю над приложением MVC во время моей стажировки. Это приложение, в котором вы создадите отчеты о проданных продуктах. Продукты перечислены с помощью флажков, нет возможности добавить новые для пользователя. Если я открою новое окно отчета, мне нужен полный список не проверенных продуктов (продукт в модели имеет только идентификатор и имя), который будет происходить без каких-либо проблем, потому что коллекция в отчете Model пуста на данном этапе. Я застрял в проблеме, что в том же окне одним и тем же контроллером я открою существующий отчет для издания.Объединение двух разных типов коллекций и удаление дубликатов

У меня есть две отдельные модели для продуктов: Продукты и ProductsInReport, а также модели для своих коллекций, далее идут их ViewModels. В случае редактирования существующего отчета я хочу отобразить отмеченные продукты из предыдущего выпуска (создания) отчета, а также остальную часть продуктов без дублирования. И вот где моя проблема. Я не знаю, как отфильтровать это.

Контролер вызывает процедуру, которая получает отчет, и в ней у нас есть коллекция продуктов (которые были проверены, могут быть пустыми). Он также вызывает вторую процедуру, которая получает сбор всех доступных продуктов из БД. Я пытался работать следующим образом: http://alicebobandmallory.com/articles/2012/10/18/merge-collections-without-duplicates-in-c

Но у меня проблемы, так как у моих коллекций есть разные типы. Вопрос в том, как на уровне ViewModel Можно ли сравнивать продукты, поставляемые с отчетом, со всеми продуктами, доступными для получения результата без дубликатов?

Надеюсь, я сделал себе возможный ясность (если нет, извините, второй день работы с той же маленькой проблемой).

ответ

0

Хотя они могут быть (возможно, неверно) разными типами, между этими двумя типами должно быть что-то общее, как ID, например ProductID.

Вы должны использовать это, чтобы удалить использованные продукты из полного списка, чтобы предоставить доступный список.

var usedProductIDs = report.Products.Select(x=>x.ProductID).ToList(); 
var availableProducts = allProducts.Where(x=>!usedProductIDs.Contains(x.ProductInReportID)) 
            .ToList(); 

(без сомнения, более эффективные способы достижения того же, но это основная идея).

Для дальнейшего использования потребуется дополнительная информация о ваших объектах и ​​свойствах.

Смежные вопросы