使用C#与Lambda如何从嵌套List的对象属性中获取去重列表
实现方案
你可以借助LINQ的SelectMany方法摊平嵌套集合,配合后续操作一行实现需求,正确写法如下:
List<string> productIds = orders .SelectMany(order => order.Products) // 展开所有订单下的商品集合为一维商品序列 .Select(product => product.ID) // 提取所有商品的ID属性 .Distinct() // 对ID去重 .ToList();
如果需要更精简的写法,可以直接用SelectMany的重载直接映射结果,省略单独的Select步骤:
List<string> productIds = orders.SelectMany(o => o.Products, (_, p) => p.ID).Distinct().ToList();
补充说明
你原先的写法报错是因为orders是Order类型的集合,本身没有Products属性,必须先遍历每个Order实例取出对应的Products嵌套集合,再做后续的提取、去重操作。
内容的提问来源于stack exchange,提问作者Hoss
相关产品推荐
相关产品推荐

