如何在带有 where 子句的字符串列表中使用 contains

how to use contains on list of string with where clause

当我尝试过滤与搜索列表中的任何项目相匹配的记录时,return 没有给我任何信息。请看代码

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

class Test {

    // Main Method
    public static void Main(String[] args)
    {
        List<String> searchlist = new List<String>();
        searchlist.Add("Mang");
        searchlist.Add("Apple");
        
        List<String> firstlist = new List<String>();
        firstlist.Add("Mango");
        firstlist.Add("Apple");
        firstlist.Add("Orange");
        firstlist.Add("Grapes");
        
        test1 obj = new test1();
        obj.stringList = firstlist;

        Console.Write(obj.stringList.Where(x=> searchlist.Contains(x)).Count());
    }
    
    public class test1
    {
        public string id { get; set; }
        public string name { get; set; }
        public List<String> stringList { get; set; }
    }
}

在上面的示例中,如果我将传递像“Mango”这样的完整字符串,那么它将 return 结果,但如果我尝试仅搜索“Mang”(部分单词),则它不起作用。

试试这个

Console.Write(obj.stringList.Where(x => searchlist.Any(list => x.Contains(list))).Count());

原因是在集合上使用 Contains() 时,会导致比较其项目。所以你问的是 "Mang" == "Mango"

正如在另一个答案中所述,您想确保使用包含比较字符串,但重要的是选择我们将包含应用于哪个字符串

var result = obj.stringList.Where(item => searchlist.Any(searchString => item.Contains(searchString))).Count();