2015-12-18 28 views
1

我的代碼:如何在DataTable DotNet中選擇像列一樣的值?

Dim dt As New DataTable 
    dt.Columns.Add("No") 
    dt.Columns.Add("Col2") 
     Dim dr = dt.NewRow 
    dr("No") = 1 
    dr("Col2") = "abc" 
    dt.Rows.Add(dr) 
Dim strText="abcdes" 
For Each drow As DataRow In dt.Select(String.Format("'{0}' like '%' & Col2 & '%'", strText)) 
//value of Col2 exist in strText 
Next 

它顯示錯誤:

{"The expression contains unsupported operator '&'."} System.Data.EvaluateException

像DataTable中DOTNET的列如何選擇價值?

+0

你不需要'&',只是糾正'LIKE'格式。 –

+0

如果刪除&:「語法錯誤:'Col2'操作符後缺少操作數。」} \t System.Data。SyntaxErrorException –

+0

備註:Col2是ColumnName –

回答

1

您應該使用+代替&和糾正格式LIKE

要檢查Col2是否包含strText,您應該使用String.Format("Col2 LIKE '%{0}%'", strText)

Dim foundRows() As DataRow 
foundRows= dt.Select(String.Format(" '{0}' LIKE '%' + Col2 + '%' ", strText)) 
For Each dr As DataRow In foundRows 
    'Do something 
Next 

要了解有關表達式語法:

注:

如果不是得到的DataRow列表,你要過濾一個DataTable,例如在DataGridView,使用只顯示過濾行:

Me.DataGridView1.DataSource = dt 
dt.DefaultView.RowFilter = String.Format("Col2 LIKE '%{0}%'", strText) 
+0

我想選擇像Colum名稱的值:sql中的相同查詢:select * from TableA其中'F3'如'%'&Columname&'%' –

+0

因此,正是你所需要的。它返回它們的'Col2'行,包含'strText'中的值。 –

+0

這是表達式語法,它與sql語法不完全相同。 –

-1

您是否嘗試過使用dt.AsEnumerable()並使用LINQ函數?

在你的情況,你可以做類似的事情

var dataRows = dt.AsEnumerable(); var matchingRows = dataRows.Where(e=>e.Row<string>("Col2").Contains(strText)).Select();

這將返回具有所有包含strText的

的價值它更容易閱讀和更多的行一個IEnumerable首選方式。如果Col2值包含在strText它返回該行

String.Format(" '{0}' LIKE '%' + Col2 + '%' ", strText) 

對於每一行,這個檢查:

1

儘管建設一個LIKE條件正確的過濾器值,必須照顧特殊字符。

有一個例子here

public static string EscapeLikeValue(string valueWithoutWildcards) 
{ 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < valueWithoutWildcards.Length; i++) 
    { 
    char c = valueWithoutWildcards[i]; 
    if (c == '*' || c == '%' || c == '[' || c == ']') 
     sb.Append("[").Append(c).Append("]"); 
    else if (c == '\'') 
     sb.Append("''"); 
    else 
     sb.Append(c); 
    } 
    return sb.ToString(); 
} 

正如其他人所說,你的語法看起來很奇怪,嘗試

dt.Select(String.Format("col2 LIKE '%{0}%'", EscapeLikeValue(strText)) 
+0

可以使用EscapeLikeValue來評估Col2的價值嗎? –

+0

@DT只是爲了澄清:你想查找col2包含'abcdes'的每一行嗎?或者你想查找'abcdes'包含col2值的每一行嗎? –

相關問題