2012-07-30 147 views
0

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

我有以下LINQ查询:

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

我想看看是否能查询的结果包含一个字符串(在形式上通过文本框)“wildcardSearchString”。

+0

“查询结果”是什么意思?你有一系列*行* - 你想检查哪一列是否存在字符串? – 2012-07-30 16:51:32

+0

你得到了什么错误? – 2012-07-30 16:51:53

+0

我应该说得更清楚。我想看看我的搜索值是否在任何行中。 – CodeMan5000 2012-07-30 16:56:43

回答

1
var searchRows = 
     rows.Where(tr => tr.ItemArray 
      .Any(ti => ti.ToString().IndexOf("wildcardSearchString", StringComparison.CurrentCultureIgnoreCase) > 0)) 

这将通过每个被返回的行,看看是否“wildcardSearchString”是行项目字符串表示(不区分大小写)。但问题是,这不会让你获得通配符搜索支持,所以你必须自己找出一个。您可以尝试使用正则表达式,这需要稍作修改:

string searchPattern = "some*string".Replace("*", ".*"); 
var searchRows = 
     rows.Where(tr => tr.ItemArray 
      .Any(ti => Regex.IsMatch(ti.ToString(), searchPattern))) 

希望有所帮助。只是要警告,如果他们决定尝试提供一个正则表达式模式,那么这可能会弄乱他们正在寻找的任何东西,所以你只需要小心输入。

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; 
    } 
+0

Aghilas,我试过你的例子,但我得到以下错误,“不能用[]对'System.Collections.Generic.IEnumerable <>”类型的表达式应用索引。我该如何解决这个问题? – CodeMan5000 2012-07-30 17:01:28

+0

应用ToList()第一个 – Shyju 2012-07-30 17:02:42

+0

谢谢Shyju,Larry尝试使用ToArray()修改后的文章 – 2012-07-30 17:06:22

1
Boolean found = false; 
foreach(Datarow d in rows) 
{ 
    foreach(object o in d.ItemArray) 
    { 
     if(o.ToString().Contains("test") 
     { 
      found=true; 
      break; 
     } 
    } 
} 

你的意思是这样?

+0

Anthony,我试过你的方法,但我得到该对象不包含'contains'的定义的错误。 – CodeMan5000 2012-07-30 17:28:54

+0

@LarryBargers你试过o.ToString()。包含(“test”)? – 2012-07-30 17:35:38

1

我不知道您是否知道DataTable的内置搜索功能?你可以使用它的方法Select

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

的LINQ是确定的,但并不总是需要:)。