【问题标题】:Why does this return zero results?为什么这会返回零结果?
【发布时间】:2011-02-09 20:33:17
【问题描述】:

我有一个List<List<string>>,当我尝试使用List<string> 进行搜索时,它没有返回任何结果。

有什么想法吗?

谢谢

        List<List<string>> test = new List<List<string>>();

        List<string> ff = new List<string>();
        ff.Add("1");
        ff.Add("ABC 1");
        test.Add(ff);

        ff = new List<string>();
        ff.Add("2");
        ff.Add("ABC 2");

        test.Add(ff);

        var result = test.Where(x=>x.Contains("ABC"));

        //result.Count(); is 0

【问题讨论】:

  • 你的意思可能是test.Where(x=&gt;x.StartsWith("ABC"));

标签: c# .net linq generics c#-4.0


【解决方案1】:

您的两个列表都不包含“ABC”元素。

如果您想查找具有包含“ABC”作为子字符串的元素的列表,您可以这样做:

var result = test.Where(x => x.Any(y => y.Contains("ABC")));

【讨论】:

  • 要使其工作,必须重写 List&lt;string&gt; 的 Contains() 方法以在每个字符串中搜索并且正好等于每个字符串,这可能会很慢。
  • 这行得通,但我不明白怎么做,因为 Any() 只返回一个布尔值
  • Any 是 select 的谓词。这与说“选择 Y = ABC 的位置”相同。您不会期望您的选择不起作用,因为您的 where 子句处理布尔值。
  • 谢谢。是否可以使其不区分大小写?
  • @Jon:不区分大小写请参阅此问题string.Containsstackoverflow.com/questions/444798/…
【解决方案2】:

这是因为您正在做一个列表的列表,而您的选择还不够深入。这样的事情应该会给你两个结果:

var result = test.Select(x => x.Where(y => y.Contains("ABC")));

【讨论】:

  • 差不多,但我需要结果是 List>
【解决方案3】:

您的所有列表都不包含字符串“ABC”。当您使用包含函数时,它不会搜索字符串,它只会匹配整个字符串。如果要搜索部分字符串,则必须使用以下内容:

var result = test.Where(x => x.Where(y => y.Contains("ABC").Count() > 0));

【讨论】:

  • 我改变了它,所以它应该返回你想要的项目的List&lt;List&lt;string&gt;&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多