c# - LINQ / C#从一个列表中删除多个其他列表中的所有项目
问题描述
我有以下设置:
1 个包含约 500 种产品的列表。
1 个分类列表,每个分类包含一个产品列表(在分类中)和一些其他属性。
我的模型看起来像这样(简化):
public Model() {
public List<Products> {get; set;}
public List<Assortment> {get; set;}
}
并且分类看起来像这样(简化)
public Assortment() {
public int ID {get; set;}
public string Name {get; set;}
public List<Product> Products {get; set;
}
我想展示所有不属于任何分类的产品。
我试过这样的事情:
Model.Products.Except(x => Model.Assortments.Where(y => y.Products.Contains(x)).Select(z => z.Products).ToList()
但是编译器告诉我
“Lambdaexpression”无法转换为类型“IEnumerable”,因为它不是委托类型
(从德语翻译成英语)
我也尝试了 RemoveAll 或 Where 的一些东西,但我无法让它工作。
解决方案
使用 SelectMany,您可以获得任何分类中的所有产品
Model.Assortments.SelectMany(a => a.Products)
所以不属于任何分类的产品是:
Model.Products.Except(Model.Assortments.SelectMany(a => a.Products))
正如@GuruStron 在评论中指出的那样,这假设分类中的产品可以用 Products 集合中的产品来标识,因为它们是相同的对象或被合适的Equals
覆盖。
推荐阅读
- angular - 使用角度更新来自 db 的绑定数据的 p 图
- python-3.x - 如何为大型数据集重命名 Python Pandas 数据框中的行索引?
- php - Excel to php 删除表格和未使用的字符
- regex - 使用 XSLT 从字符串中查找动态长度数
- c# - SignalR - 启动时长时间运行的任务
- azure - 如何使用 Powershell 更改 Azure Function App 的“始终在线”?
- html - 如何检查哪些网页元素是真正可点击的?
- c# - 如何在 Code-Behind 中将 StaticRecsource 用于画笔
- java - 使用黑盒类在 Eclipse/Java 中读取 txt 文件
- python - ARIMA 模型 - MissingDataError:exog 包含 inf 或 nans