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

如何使用LINQ查询多个列表并选择多项,简化现有实现代码

简化方案

你原来的代码重复执行了两次完全相同的笛卡尔积筛选逻辑,仅返回值不同,我们可以一次筛选出符合条件的奇偶配对后,直接把两个值都合并到结果序列中,既减少了重复计算,也缩短了代码:

方法1:方法链写法(更简洁)

IEnumerable<int> query1 = evens
    .SelectMany(e => odds, (e, o) => new { e, o })
    .Where(pair => pair.e > pair.o * 2)
    .SelectMany(pair => new[] { pair.e, pair.o })
    .Distinct()
    .OrderBy(n => n);

// 遍历输出逻辑和原代码一致
foreach (int item in query1)
{
    Console.WriteLine(item);
}

方法2:查询语法写法

如果偏好LINQ查询语法,也可以写成:

IEnumerable<int> query1 = (
    from e in evens
    from o in odds
    where e > o * 2
    from n in new[] { e, o }
    select n
).Distinct().OrderBy(n => n);

逻辑说明

上述两种写法和原实现逻辑完全等价:

  • 一次完成偶数、奇数的笛卡尔积筛选,避免重复执行相同的判断逻辑
  • 通过SelectMany把符合条件的e(偶数)和o(奇数)直接展平到同一个结果序列
  • Distinct去重+OrderBy升序排序的效果和原代码的Union+排序完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:06:10