2010-09-27 46 views
3

工作,我有一個數據表中選擇,如:C#的DataTable選擇不包含特殊字符#

productData.Select("Name = 'AAA BBB # CCC'"); 

我知道該條目是存在的,它只是不因爲#字符的工作。我曾嘗試用[]像逃脫:

productData.Select("Name = 'AAA BBB [#] CCC'"); 

但它仍然無法正常工作。我知道單引號,我加倍他們,所以'成爲''。但是我還需要關注哪些其他角色,以及如何讓這個案例發揮作用。

回答

3

你絕對有這樣使用DataTable嗎?正是出於這個原因,我一直對DataTable中基於文本的查詢感到非常緊張。

如果可能的話,我建議你開始使用LINQ。您可以使用DataTable,例如

var query = products.AsEnumerable() 
        .Where(row => row.Field<string>("Name") == "AAA BBB # CCC"); 

這樣,你不必擔心逃避等。如果你使用強類型數據集它變得更簡單,因爲你可以參考性質,而不是直接使用字符串名稱。

+0

我沒有強類型數據集。不會轉換爲Enumerable涉及循環遍歷所有行(內部)至少一次,只是爲了轉換?正如你所建議的那樣,這樣做會降低性能的機率。否則,你不會建議它。但我相信你的回答會增加我的知識。 – IsmailS 2010-12-27 04:57:52

+0

@Ismail:它不需要轉換任何東西 - 這只是返回一個「IEnumerable 」,並且DataTable已經包含行。 – 2010-12-27 09:15:13

+0

非常感謝您的時間和答覆。我查看了'EnumerableRowCollection '(將輸入視爲DataTable的那個)的構造函數,因爲最終在調用'DataTable'實例的'.AsEnumerable()'時被調用。我發現它調用'DataTable.Rows.Cast ()',它返回'IEnumerable '。所以調用'products.AsEnumerable()'和調用'products.Rows.Cast ()'一樣好。我現在明白了。再次感謝。 – IsmailS 2010-12-29 07:41:18

2

你有沒有嘗試過這樣的事情?

productData.Select(@"Name = 'AAA BBB # CCC'");