使用linq查找List <list <string >>

时间:2019-01-08 12:04:33

标签: c# linq

我的列表看起来像:List<List<string>>

我需要检查嵌套列表的第一个值是否等于某些值。

这就是我所做的并且有效:

if (myList.Any(sb => 
               sb.First() == "Value1" || 
               sb.First() == "Value2" || 
               sb.First() == "Value3" || 
               sb.First() == "Value4"))

我想知道是否有一种方法可以不重复sb.First()进行查询? 我的实施方式会影响绩效吗?

4 个答案:

答案 0 :(得分:1)

您可以首先创建一个HashSet来包含值:

var container = new HashSet<string> {"Value1", "Value2", "Value3", "Value4"};

,然后将其用作:

if (myList.Any(sb => container.Contains(sb.First()))){...}

答案 1 :(得分:1)

您可以有一个值数组,并检查它是否包含sb.First()中的内容,像这样:

if (myList.Any(sb => 
           new HashSet<string> {"Value1", "Value2", "Value3", "Value4"}.IndexOf(sb.First()) > -1)

答案 2 :(得分:1)

var matches = new HashSet<string>() { "Value1", "Value2", "Value3", "Value4" };

myList.Select(sb => sb.FirstOrDefault()).
       Any(st => matches.Contains(st));

应该使用HashSet来改善字符串比较。

答案 3 :(得分:1)

您也可以这样做:

        if (l.Any(x =>
        {
            var sb = x.First();
            return sb == "Value1" ||
                   sb == "Value2" ||
                   sb == "Value3" ||
                   sb == "Value4";
        }))
        {
            // true
        }