0

我正在尝试使用动态 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 语法可以正常工作,但我再次不确定这是否可以使用动态 LINQ API:

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

1 回答 1

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
于 2009-10-14T22:09:41.500 回答