Динамический LINQ API - функция преобразования SQL

Я пытаюсь использовать Dynamic LINQ Query для запроса базы данных SQL, и в предложении Where мне нужно оценить условие '=' с полем типа TEXT.

Прямо сейчас у меня есть это:

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)");

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

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

РЕДАКТИРОВАТЬ: следующий синтаксис 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
Другие вопросы по тегам