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

如何在不使用if语句时,当变量为特定值忽略LINQ查询片段?

问题

现有一段LINQ查询代码:

var longlinq = viewModel.Where(x => (x.Systems.Storage == SelectOption || x.Systems.Laptop == SelectOption ||
                  x.Systems._2In1 == SelectOption ||
                  x.Systems.Convertible == SelectOption ) 
                  ||
                  (x.Component.Components == SelectOptionComp ||
                  x.Component.Boards == SelectOptionComp)
                  ||
                 ( x.Service.Services == SelectOptionSer ||
                  x.Service.DevelopmentTools_andServices == SelectOptionSer ) 
                  ||
                  (x.Software.Softwares == SelectOptionSoft ||
                  x.Software.Analytics == SelectOptionSoft) 
                  ||
                  (x.Application.Applications == SelectOptionApp ||
                  x.Application.PrintImaging_andOfficeAutomation ));

需求是:当SelectOptionComp等于"-"时,忽略查询中用到该参数的条件组,且不想因为参数组合多而写大量if语句,该怎么实现?

解决方法

给每个条件组加个前置判断:如果对应的筛选参数是"-",就让这个条件组直接返回true(相当于跳过该组筛选),否则执行原匹配逻辑。

修改后的代码:

var longlinq = viewModel.Where(x => 
    // 系统组:参数为"-"则跳过,否则匹配字段
    (SelectOption == "-" || x.Systems.Storage == SelectOption || x.Systems.Laptop == SelectOption || x.Systems._2In1 == SelectOption || x.Systems.Convertible == SelectOption)
    ||
    // 组件组:参数为"-"时直接跳过该组
    (SelectOptionComp == "-" || x.Component.Components == SelectOptionComp || x.Component.Boards == SelectOptionComp)
    ||
    // 服务组:同理
    (SelectOptionSer == "-" || x.Service.Services == SelectOptionSer || x.Service.DevelopmentTools_andServices == SelectOptionSer)
    ||
    // 软件组:同理
    (SelectOptionSoft == "-" || x.Software.Softwares == SelectOptionSoft || x.Software.Analytics == SelectOptionSoft)
    ||
    // 应用组:原代码这里疑似漏了参数匹配,我补成和SelectOptionApp对比,可按需调整
    (SelectOptionApp == "-" || x.Application.Applications == SelectOptionApp || x.Application.PrintImaging_andOfficeAutomation == SelectOptionApp)
);
逻辑解释
  • 每个条件组开头的参数 == "-"是核心:只要参数是"-",整个组的结果就是true,不会走后面的字段匹配,相当于直接跳过该部分的筛选。
  • 当参数不是"-"时,就会执行原本的字段匹配逻辑,和原查询行为完全一致。
  • 这种方式不用拆分多个if分支拼接查询,所有逻辑都集中在一个Where表达式里,简洁易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:30:45