连接两种不同类型的集合并删除重复集合

本文关键字:集合 合并 删除 两种 同类型 连接 | 更新日期: 2023-09-27 17:51:05

我目前在实习期间正在做一个MVC应用。这将是一个应用程序,您可以在其中创建有关销售产品的报告。产品以复选框列出,无法为用户添加任何新产品。如果我打开一个新的报告窗口,我需要一个未选中产品的完整列表(模型中的产品只有ID和名称),这将不会发生任何问题,因为reportModel中的集合在此阶段是空的。我遇到了一个问题,即在同一窗口中,通过相同的控制器,我将打开一个现有的版本报告。

我有两个独立的产品模型: products ProductsInReport和他们的集合模型,进一步来他们的ViewModels。在编辑现有报告的情况下,我想显示从以前的版本(创建)的报告的选中的产品,但也没有重复的产品的其余部分。这就是我的问题所在。我不知道该怎么过滤。

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

但是我有麻烦,因为我的集合有不同的类型。问题是如何在ViewModel的级别上,我可以将报告附带的产品与所有可用产品进行比较,以获得没有重复的结果?

我希望我能说清楚(如果没有,我很抱歉,第二天工作的同一个小问题)。

连接两种不同类型的集合并删除重复集合

虽然它们可能是(可能不正确地)不同的类型,但这两种类型之间应该有一些共同点,最像ID,例如ProductID

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

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

(毫无疑问,有更有效的方法来达到同样的目的,但这是基本的思想)。

要进一步帮助,需要您的对象和属性的更多细节。