You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用LINQ简化合并两个不同类型IEnumerable的一对多关联操作?

用LINQ简化笛卡尔积关联操作

当然可以用LINQ来简化你现在的嵌套循环逻辑!你要实现的其实是两个集合的笛卡尔积(每篇文章和所有计量单位配对),LINQ里的SelectMany方法就是干这个的完美工具,它能帮你把嵌套的循环逻辑转换成更简洁、可读性更强的链式调用或者查询表达式。

方法链写法

var searchList = articlelist
    .SelectMany(article => measureList, 
                (article, measureUnit) => new Models.SearchItem
                {
                    IDItem = measureUnit.IDMeasureUnit,
                    PrincipalProperty = article.Description,
                    SecondaryProperty = measureUnit.Description
                })
    .ToList();

查询表达式写法

如果你更喜欢SQL风格的查询语法,也可以这样写:

var searchList = (from article in articlelist
                  from measureUnit in measureList
                  select new Models.SearchItem
                  {
                      IDItem = measureUnit.IDMeasureUnit,
                      PrincipalProperty = article.Description,
                      SecondaryProperty = measureUnit.Description
                  }).ToList();

逻辑说明

这两种写法和你原来的嵌套循环逻辑完全等价:

  • SelectMany(或者查询表达式里的两个from)会遍历每一篇article,然后对每篇文章遍历所有的measureUnit
  • 每一组article和measureUnit配对后,都会生成一个新的SearchItem对象
  • 最后调用ToList()把结果转换成List集合,和你原来的Add逻辑一致

这样写不仅代码更紧凑,也更符合LINQ的声明式编程风格,读起来能直接明白你要做什么,而不是关注怎么循环的细节。

内容的提问来源于stack exchange,提问作者Pozeras

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:05:59