2009-10-14 2 views
0

Я пытаюсь использовать запрос Dynamic LINQ Query для запроса базы данных 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 данных. Поле типа 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)"); 

Но похоже, что это не поддерживается.

У кого-нибудь есть подсказки относительно того, как я могу это сделать?

EDIT: Следующий SQL Синтаксис работает без проблем, но я опять не уверен, если это возможно с помощью Dynamic 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

+0

Нечетный. Просто чтобы убедиться, что, когда вы игнорируете '.ToString()', какое сообщение об ошибке вы получаете? Я получаю «SQL Server не обрабатывает сравнение типов файлов NText, Text, Xml или Image». Это происходит при ударе экземпляра SQL Server 2005 (Express). –

+0

Получается аналогичное сообщение об ошибке, указывающее, что NVarChar to Text не сопоставим с оператором equals. – Overhed

Смежные вопросы