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

LINQ多条件Where子句不生效:CSV数据过滤结果为空问题

问题分析与解决方案

你的代码逻辑踩了一个典型的逻辑误区:你是在对单个单元格同时施加两个互斥(或极少重合)的条件,要求这个单元格的文本既要等于domain.Name,又要包含domaintype.ToString()的内容——这显然和你实际需求不符,你要的是整行数据满足两个独立条件:

  1. 该行中存在至少一个单元格的文本等于domain.Name
  2. 该行中存在至少一个单元格的文本包含domaintype.ToString()的内容(可以是同一个单元格,也可以是不同单元格)

修正后的代码

var rows = excelsheet
    // 先把所有单元格按所在行分组,同一行的单元格归为一组
    .GroupBy(x => x.Start.Row)
    // 对每一行(分组)判断两个条件是否同时满足
    .Where(rowGroup => 
        rowGroup.Any(cell => cell.Text == domain.Name) 
        && rowGroup.Any(cell => cell.Text.Contains(domaintype.ToString()))
    )
    // 提取符合条件的行号
    .Select(rowGroup => rowGroup.Key)
    .ToList();

为什么原来的代码不生效?

原来的Where(x => x.Text == domain.Name && x.Text.Contains(domaintype.ToString()))是逐个检查单元格:只有当某个单元格的文本同时满足等于域名和包含类型字符串时,才会被选中。除非你的domain.Name本身就包含domaintype.ToString()的内容,否则根本找不到这样的单元格,自然返回空列表。

而修正后的代码先按行分组,把判断逻辑从“单个单元格”升级到“整行”,分别检查行内是否存在符合两个条件的单元格,完美匹配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:50:26