检查Linq Result的值

时间:2012-07-30 16:47:12

标签: c# linq

如何检查特定字符串值的LINQ查询结果?

我有以下linq查询:

IEnumerable<DataRow> rows = searchParamsTable.AsEnumerable()
                                        .Where(r => r.Field<String>("TABLE") == tableNumbers[i].ToString()
                                        && r.Field<String>("FIELD ") == fieldName[i]);

我想看看该查询的结果是否包含一个字符串(从文本框中传递)“wildcardSearchString”。

4 个答案:

答案 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没问题,但并不总是需要:)。