动态LINQ API - SQL转换函数

时间:2009-10-14 19:15:45

标签: c# linq linq-to-sql dynamic-linq

我正在尝试使用动态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')

1 个答案:

答案 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