加入两种不同类型的集合并删除重复项

时间:2015-05-28 09:15:44

标签: c#

我目前正在实习期间制作一个MVC应用程序。它将是一个用于创建有关已售产品的报告的应用程序。列出的产品带有复选框,不可能为用户添加任何新内容。如果我打开一个新的报告窗口,我需要一个未检查产品的完整列表(模型中的产品只有一个ID和名称),这将在没有任何问题的情况下发生,因为 reportModel 中的集合为空这个阶段。我遇到了一个问题,即在同一个控制器的同一个窗口中,我将打开一个现有的版本报告。

我有两种不同的产品型号:产品 ProductsInReport 以及其系列的型号,还有 ViewModels 。 在编辑现有报告的情况下,我希望显示报告的先前版本(创建)中的已检查产品,但也显示其余产品没有重复。这就是我的问题所在。我不知道如何过滤这个。

控制器调用获取报告的程序,在其中我们有产品的集合(已检查,可以为null)。它还调用第二个过程,该过程从DB中收集所有可用产品。 我试图用这些方法工作: http://alicebobandmallory.com/articles/2012/10/18/merge-collections-without-duplicates-in-c

但我在那里遇到了麻烦,因为我的收藏品有不同的类型。 问题是如何在 ViewModel 的层面上比较报告附带的产品和可用的所有产品,以获得没有重复的结果?

我希望自己可能做得很清楚(如果不是我很抱歉,第二天处理同样的小问题)。

1 个答案:

答案 0 :(得分:0)

虽然它们可能(可能是错误的)不同类型,但两种类型之间应该有一些共同点,大多数类似于ID,例如ProductID

您应该可以使用此功能从完整列表中删除已使用的产品,以提供可用列表。

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

(毫无疑问,更有效的方法可以实现相同目标,但这是必不可少的想法)。

进一步需要进一步了解对象和属性的详细信息。