Динамический 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