转换方法。 "The specified method on the type cannot be translated into a LINQ to Entities store expressio



我已经将我的实体6.0项目从SQL Server迁移到PostGreSQL。使用SQL Server,对我的查询的这种转换曾经正常工作

模块.cs

return (
    from m in objDB.Modules
    orderby m.ID
    select new
    {
        ID = m.ID,
        Name = m.Name,
        Status = DB_Function.Convert.ToInt32( m.Status )
    }
);

PS:状态是布尔类型

DB_Function.cs

[System.Data.Entity.DbFunctionAttribute( "Business.Database", "ToInt32" )]
public static Int32 ToInt32( Boolean Val )
{
    return System.Convert.ToInt32( Val );
}

但是,当我迁移到PostgreSQL(因此更改了我的EDMX)时,这些转换不再执行:

类型上的指定方法"Int32 ToInt32(布尔值)" "DB_Function+转换"无法转换为 LINQ to Entities 存储表达式。

此错误与 PostGre 有关(如 int4 而不是 int32)还是我错过了什么?

提前谢谢。

为了了解我们可以在 LINQ to Enitities 中使用什么类型的函数: 通过下面的 linK :LINQ to 实体无法识别方法

现在,在这种特殊情况下,我们在 LINQ to Entites 端有一个函数,该函数无法转换为 SQL 查询,因此抛出了异常。因此,通过删除该功能,它可以完美地工作。

返回 ( from m in objDB.Modules 按 m.ID 订购 选择"新建" { ID = m.ID, 名称 = m.Name, 状态 = m.状态 == 真 ?1 : 0 } );

只需删除您的函数,如果您的值不可为空,它将起作用

return (
from m in objDB.Modules
orderby m.ID
select new
   {
    ID = m.ID,
    Name = m.Name,
    Status = Convert.ToInt32( m.Status )
   }
);

如果可为空,则需要检查它是否有值:

return (
from m in objDB.Modules
orderby m.ID
select new
   {
    ID = m.ID,
    Name = m.Name,
    Status =m.Status.HasValue? Convert.ToInt32( m.Status ):0
   }
);

相关内容

  • 没有找到相关文章

最新更新