例如,列表lstHazProduct
包含"NOTEBOOK LAPTOP", "MOBILE PHONE"
等项目。
strTest = "SAMSUNG NOTEBOOK";
如何使用linq
或%LIKE%
运营商。
如果字符串中存在列表项,则满足条件。下面的字符串与列表项比较不起作用。
if (lstHazProducts.Where(s => s.HazpName.Contains(strTest)).Count() > 0)
{
//do something
}
感谢。
答案 0 :(得分:2)
您的代码足以检查lstHazProducts
与strTest
类似%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";
如果符合您的情况,您似乎要检查字符串中是否有单词(SAMSUNG
,NOTEBOOK
):
// 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