如何检查特定字符串值的LINQ查询结果?
我有以下linq查询:
IEnumerable<DataRow> rows = searchParamsTable.AsEnumerable()
.Where(r => r.Field<String>("TABLE") == tableNumbers[i].ToString()
&& r.Field<String>("FIELD ") == fieldName[i]);
我想看看该查询的结果是否包含一个字符串(从文本框中传递)“wildcardSearchString”。
答案 0 :(得分:1)
尝试使用此代码
DataRow[] array = rows.ToArray();
array.Contains(yourIndex, yourTextBox.Text);
添加此扩展程序
public static bool Contains(this DataRow[] dataRows, string value, int index)
{
foreach(var row in dataRows)
{
if(row[index].ToString().Contains(value))
{
return true;
}
}
return false;
}
答案 1 :(得分:1)
Boolean found = false;
foreach(Datarow d in rows)
{
foreach(object o in d.ItemArray)
{
if(o.ToString().Contains("test")
{
found=true;
break;
}
}
}
你的意思是这样吗?
答案 2 :(得分:1)
var searchRows =
rows.Where(tr => tr.ItemArray
.Any(ti => ti.ToString().IndexOf("wildcardSearchString", StringComparison.CurrentCultureIgnoreCase) > 0))
这将遍历返回的每一行,并查看“wildcardSearchString”是否在行项目字符串表示中(忽略大小写)。这是问题所在,这不会让你获得通配符搜索支持,所以你必须自己解决这个问题。您可以尝试使用Regex,这需要稍作修改:
string searchPattern = "some*string".Replace("*", ".*");
var searchRows =
rows.Where(tr => tr.ItemArray
.Any(ti => Regex.IsMatch(ti.ToString(), searchPattern)))
希望有所帮助。请注意,如果他们决定尝试提供正则表达式模式,那么他们所搜索的内容可能会非常混乱,所以你只需要小心输入。
答案 3 :(得分:1)
我不知道您是否了解DataTable
的内置搜索功能?您可以使用其Select方法:
DataRow[] rows = searchParamsTable
.Select("TABLE = 'Table1' AND FIELD like '%wildcardSearchString%'");
Linq没问题,但并不总是需要:)。