0

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

我有以下 linq 查询:

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

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

4

4 回答 4

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;
  } 
于 2012-07-30T16:51:53.903 回答
1
Boolean found = false;
foreach(Datarow d in rows)
{
    foreach(object o in d.ItemArray)
    {
        if(o.ToString().Contains("test")
        {
            found=true;
            break;
        }
    }
}

你的意思是这样的吗?

于 2012-07-30T16:54:39.590 回答
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)))

Hope that helps. Just be warned that if they decide to try supplying a Regex pattern than this might really mess up whatever they were searching for, so you just need to be careful of input.

于 2012-07-30T21:15:36.357 回答
1

I don't know if you're aware of the built-in search capabilities of a DataTable? You could use its Select method:

DataRow[] rows = searchParamsTable
    .Select("TABLE = 'Table1' AND FIELD like '%wildcardSearchString%'");

Linq is OK but not always required :).

于 2012-07-31T21:01:10.773 回答