我将我的实体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)或者我错过了什么?
提前致谢。
答案 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
}
);