我正在尝试使用动态LINQ查询来查询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')
答案 0 :(得分: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