【问题标题】:Dynamic LINQ API - SQL Convert Function动态 LINQ API - SQL 转换函数
【发布时间】:2009-10-15 06:09:41
【问题描述】:

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

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

    • 它似乎不起作用。结果查询与之前相同:SELECT [t0].[OrderNum], [t0].[OrderLine] FROM [PcInValue] AS [t0] WHERE ([t0].[InputName] = 'OpenWidthFt') AND ([ t0].[InputValue] = '10')
    • 奇数。只是为了确保,当您省略 .ToString() 时,您会收到什么错误消息?我得到“SQL Server 不处理 NText、Text、Xml 或 Image 数据类型的比较。”这是在访问 SQL Server 2005 (Express) 实例时。
    • 我收到一条类似的错误消息,说 NVarChar to Text 不能与等号运算符比较。
    • 我猜这是你得到的确切错误:“数据类型 text 和 nvarchar 在等于运算符中不兼容。”当 InputValue 的服务器数据类型(dbml 中的属性)设置为 NVarChar(255) NOT NULL 而不是 Text 时,我可以重现这一点。您能否检查并确认它仍设置为文本?
    • 那应该和我的一样。您是否尝试过不使用动态 linq 的查询?该建议是为了帮助消除问题中的动态 linq 因素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    相关资源
    最近更新 更多