转换方法。 "该类型上指定的方法无法转换为LINQ to Entities存储表达式"

时间:2015-06-11 13:52:22

标签: c# linq entity-framework postgresql

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

Module.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)或者我错过了什么?

提前致谢。

2 个答案:

答案 0 :(得分:0)

要了解我们可以在LINQ to Enitities中使用哪种类型的函数:请参阅下面的linK: linq to entities doesn't recognize a method

现在在这个特殊情况下,我们在LINQ to Entites的一侧有一个函数,它无法转换为SQL Query,因此抛出了异常。因此,通过删除它完美的功能。

返回(         来自m的objDB.Modules         订单来自m.ID         选择新的         {             ID = m.ID,             名称= m.Name,             Status = m.Status == true? 1:0         }     );

答案 1 :(得分:-1)

只需移除您的功能,如果您的值不可为空,它就会起作用

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
   }
);