C# LINQto实体、参数和DB29.5.3的问题

C# LINQto实体、参数和DB29.5.3的问题,c#,linq,entity-framework,linq-to-entities,db2,C#,Linq,Entity Framework,Linq To Entities,Db2,首先,一些关于环境的背景信息 有两台机器:Windows“客户端”和Linux“服务器” Windows 2008 R2 x64 •IIS 7.5 •净额3.5 •SharePoint 2010 •Visual Studio 2010 •IBM DB2.NET数据提供程序运行时版本v4.0.30319,驱动程序版本9.7.4.4 RedHat Linux,IBM DB2数据库版本9.5.3* *IBM网站上的概述是将客户端升级到9.7FP5。我尝试过这个,甚至升级到了版本10,但仍然得到了相同的

首先,一些关于环境的背景信息

有两台机器:Windows“客户端”和Linux“服务器”

  • Windows 2008 R2 x64 •IIS 7.5 •净额3.5 •SharePoint 2010 •Visual Studio 2010 •IBM DB2.NET数据提供程序运行时版本v4.0.30319,驱动程序版本9.7.4.4
  • RedHat Linux,IBM DB2数据库版本9.5.3*
  • *IBM网站上的概述是将客户端升级到9.7FP5。我尝试过这个,甚至升级到了版本10,但仍然得到了相同的错误。如果本文作者所指的是服务器上运行的实际数据库版本,需要升级,那么这会带来一个问题,因为目前这不是我的客户可以接受的解决方案

    我并不是死心塌地地使用LINQ来创建实体,如果我不需要重写当前依赖它的大量现有代码,我会欢迎兼容的替代方案

    现在,关于这个问题

    下面是我试图执行的代码。注意查询中使用的caseid参数

    public List<JqueryAutocompleteEntity> Cases(string caseid)
    {
        var query = (from c in context.ASSET_T
                                 where c.CA_ID_AGCY.StartsWith(caseid.Trim().ToUpper())
                                 select new JqueryAutocompleteEntity
                                            {
                                                id = c.CA_ID_AGCY.Trim(),
                                                label = c.CA_ID_AGCY.Trim(),
                                                value = c.CA_ID_AGCY.Trim()
                                            }).Distinct().Take(10);
        return query.ToList();
    }
    
    公共列表案例(字符串caseid)
    {
    var query=(来自context.ASSET\T中的c)
    其中c.CA_ID_AGCY.StartsWith(caseid.Trim().ToUpper())
    选择新建JQueryAutoCompleteTentity
    {
    id=c.CA\u id\u AGCY.Trim(),
    label=c.CA\u ID\u AGCY.Trim(),
    值=c.CA\u ID\u AGCY.Trim()
    }).Distinct().Take(10);
    返回query.ToList();
    }
    
    在运行时执行上述代码时,将引发以下异常:

    执行命令定义时出错。有关详细信息,请参见内部异常。 IBM.Data.DB2.DB2Exception:错误[42815][IBM][DB2/LINUX8664]SQL0171N例程“SYSIBM.STRIP”的“string expr”位置的参数的数据类型、长度或值不正确。参数名称:“”。 在IBM.Data.DB2.DB2Command.ExecuteReaderObject(CommandBehavior行为、字符串方法、DB2CursorType reqCursorType、Boolean abortOnOptValueChg、Boolean skipDeleted、Boolean isResultSet、Int32 maxRows、Boolean skipInitialValidation) 位于IBM.Data.DB2.DB2Command.ExecuteReaderObject(CommandBehavior,String方法) 位于IBM.Data.DB2.DB2Command.ExecuteReader(CommandBehavior) 位于IBM.Data.DB2.DB2Command.ExecuteDbDataReader(CommandBehavior) 在System.Data.EntityClient.EntityCommandDefinition.ExecuteStorommands(EntityCommand EntityCommand,CommandBehavior)中执行命令

    这是LINQ to实体生成的SQL语句,它被传递到.NET DB2驱动程序,以便在DB2数据库中的Linux服务器上执行

    选择 铸造(1为整型)为C1, 剥离(延伸1.CA_ID_AGCY,两者)作为C2, 剥离(延伸1.CA_ID_AGCY,两者)为C3, 剥离(延伸1.CA_ID_AGCY,两者)为C4 从资产扩展1 其中(定位(上部(条带(@p_linq_1,两者)),Extent1.CA_ID_AGCY))=CAST(1 AS int)

    如您所见,似乎在生成最终SQL语句时使用了参数/变量的名称,而不是用实际值替换它。此外,将值硬编码到我的LINQ查询中实际上效果很好


    c、 CA_ID_AGCY.StartsWith(“test.Trim().ToUpper())您是否找到了解决方案?我遇到了同样的问题,但是有3个不同版本的DB2,其中一个没有STRIP()。呃,ibm。还有,这个例子说明了什么是有效的。。。之所以有效,是因为它不是sql,它只是一个局部变量,在您将其传递到上下文之前要对其进行修剪。我编写了几个函数,如果需要,可以自动修剪对象上的所有属性。很简单。