Linq multiple where where子句不起作用

时间:2018-04-04 21:13:31

标签: c# linq csv

我正在尝试从excel表(csv)获取特定数据。

var rows = excelsheet
    .Where(x => x.Text == domain.Name 
             && x.Text.Contains(domaintype.ToString()))
    .Select(x => x.Start.Row)
    .ToList();

我希望它过滤域名,该行中的任何单元格都可以在其中包含单词x.Text.Contains(domaintype.ToString()

但是当我运行代码时它会变空。只做where子句中的任何一个都可以正常工作。但我同时需要这两个条款才能奏效。我需要代码的行号才能工作。

以下是一个例子:

"1 ; Respect ; Hielden uw zorgverleners rekening met uw privacy? ; Vraag antenataal 11"

domain.Name是“尊重”,domaintype在这种情况下是“产前”。所以我想要每个包含这两个过滤器的行号。

我知道domain.Name中有“尊重”,domaintype中有“产前”(通过调试)。

1 个答案:

答案 0 :(得分:1)

而不是

var rows = excelsheet
.Where(x => x.Text == domain.Name 
         && x.Text.Contains(domaintype.ToString()))
.Select(x => x.Start.Row)
.ToList();

尝试

var rows = excelsheet
.Where(x => x.Text.Contains(domain.Name) 
         && x.Text.Contains(domaintype.ToString()))
.Select(x => x.Start.Row)
.ToList();

基本上,你的第一个条件是要求" 1;尊重; Hielden uw zorgverleners rekening遇见了你的隐私? ; Vraag antenataal 11"应该等于"尊重"而不是包含它,这就是没有返回价值的原因。

关于解析CSV文件,SO上已经有一个推荐几个解析器的主题,您可以查看它并选择最适合您的解析器。我在一个小项目中使用了TextFieldParser,它很简单(但不要忘记将它包装在"使用"块)。

Parsing CSV files in C#, with header