2012-07-30 68 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是確定的,但並不總是需要:)。