我已经将我的实体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
}
);