2009-10-14 34 views
0

我正在嘗試使用動態LINQ查詢來查詢SQL數據庫,並在Where子句中需要使用TEXT類型的字段來計算'='條件。動態LINQ API - SQL轉換函數

現在,我有這樣的:

var result = DBCon.PcInValue 
    .Where(String.Format("InputName = @0 and InputValue) {0} @1", f.Condition), f.Field, f.Value) 
    .Select("new(OrderNum, OrderLine)"); 

這不起作用,因爲你不能用等號操作上的一個文本數據類型。 類型爲TEXT的字段是「InputValue」。我試圖像這樣轉換它:

var result = DBCon.PcInValue 
    .Where(String.Format("InputName = @0 and Convert(nvarchar(100), InputValue) {0} @1", f.Condition), f.Field, f.Value) 
    .Select("new(OrderNum, OrderLine)"); 

但它看起來像這不支持。

任何人有任何線索,我該如何做到這一點?

編輯: 下面的SQL語法的工作原理沒有問題,但我又不敢肯定,如果這是可能使用動態LINQ API:

SELECT [t0].[OrderNum], [t0].[OrderLine] 
FROM [PcInValue] AS [t0] 
WHERE ([t0].[InputName] = 'OpenWidthFt') AND (Convert(nvarchar(100), [t0].[InputValue]) = '10') 

回答

1

我測試過這一點,似乎工作細(雖然這是一個有點奇怪):

var result = DBCon.PcInValue 
    .Where(String.Format("InputName = @0 and InputValue.ToString() {0} @1", f.Condition), f.Field, f.Value) 
    .Select("new(OrderNum, OrderLine)"); 

LinqPad告訴我這是翻譯成類似於以下(用我自己的表)的東西:

SELECT [t0].[Id], [t0].[Name], [t0].[InputValue] 
FROM [People] AS [t0] 
WHERE (CONVERT(NVarChar(MAX),[t0].[InputValue])) = @p0 
+0

它似乎沒有工作。結果查詢與以前相同: SELECT [t0]。[OrderNum],[t0]。[OrderLine] FROM [PcInValue] AS [t0] WHERE([t0]。[InputName] ='OpenWidthFt' )AND([t0]。[InputValue] ='10') – Overhed 2009-10-15 12:29:01

+0

奇數。只是爲了確保,當你省略'.ToString()'時,你會收到什麼錯誤信息?我得到「SQL Server不處理NText,Text,Xml或Image數據類型的比較。」這是在擊中SQL Server 2005(Express)實例時。 – 2009-10-15 14:27:09

+0

我收到一條類似的錯誤消息,說NVarChar to Text與等號運算符沒有可比性。 – Overhed 2009-10-15 14:54:58