如何使用列表项作为关键字将其与字符串进行比较?

时间:2017-06-19 06:37:26

标签: c# linq

例如,列表lstHazProduct包含"NOTEBOOK LAPTOP", "MOBILE PHONE"等项目。

strTest = "SAMSUNG NOTEBOOK";

如何使用linq%LIKE%运营商。

如果字符串中存在列表项,则满足条件。下面的字符串与列表项比较不起作用。

if (lstHazProducts.Where(s => s.HazpName.Contains(strTest)).Count() > 0)
{
 //do something
}

感谢。

2 个答案:

答案 0 :(得分:2)

您的代码足以检查lstHazProductsstrTest类似%Like%的匹配项。但这不足以执行搜索列表中包含strTest中任何单词的项目的检查。 在这种情况下,您可以使用以下代码:

var searchParams = strTest.Split(' ');
if (lstHazProducts.Count(s => searchParams.Any(s.HazpName.Contains)) > 0)
{
   //do something
}

作为Count()>0的替代方案,您可以尝试Any(),如下所示:

if (lstHazProducts.Any(s => searchParams.Any(s.HazpName.Contains)))
{
   //do something
}

答案 1 :(得分:0)

首先,让我们同意condiotion(s)。到目前为止,你有这么好的

string strTest = "SAMSUNG NOTEBOOK";

如果符合您的情况,您似乎要检查字符串中是否有单词SAMSUNGNOTEBOOK):

// In case strTest is long, HashSet<T> is the most efficient structure  
HashSet<String> terms = new HashSet<String>(strTest.Split(
    new char[] { ' ' }, 
    StringSplitOptions.RemoveEmptyEntries), // to prevent double space false positive
  StringComparer.OrdinalIgnoreCase);        // let be nice and allow "NoteBook"

...

List<String> lstHazProduct = new List<String>() {
  "NOTEBOOK LAPTOP", 
  "MOBILE PHONE", 
};

var result = lstHazProduct
  .Where(line => line
     .Split(new char[] { ' ' })
     .Any(item => terms.Contains(item)))
  .ToArray(); // let's materialize the result into an array