E.F. NotSupportedException - Transition from LINQ2SQL
本文关键字:from LINQ2SQL Transition NotSupportedException | 更新日期: 2023-09-27 18:04:37
我正在从LINQ2SQL
过渡到EF,并且在一些基本的lambda表达式上遇到一些麻烦。
在下面的示例中,我试图检索客户端相关数据的基本列表。当使用LINQ2SQL
数据上下文运行时,此语句运行良好。
var data = db.Clients.Select(c => c.Id + ":" + c.Firstname);
foreach (var item in data)
{
}
当我对EF数据上下文执行它时,我得到:
NotSupportedException - Unable to cast the type 'System.Int32' to type 'System.Object'. LINQ to Entities only supports casting EDM primitive or enumeration types.
NB
: Id字段为整数
我已经能够通过在db.Clients后添加ToArray()
来修复错误。
谁能解释一下……
a)我需要对我的解决方案中每个预先存在的语句进行这种代码更改,以使其与EF一起工作;和
b)当LINQ2SQL
很好时,为什么EF在基本连接上有这么多麻烦?
谢谢。
我不能告诉你为什么它在Linq2SQL中工作,而不是在实体框架中,但我可以帮助你解决你的问题。
我建议你使用SqlFunctions.StringConvert
函数。
var data = db.Clients.Select(c =>
SqlFunctions.StringConvert((double)c.Id) + ":" + c.Firstname);
就我个人而言,如果我必须做任何字符串操作,我尽量只把它放在我的客户端代码中,像这样:
var data = db.Clients.Select(c => { c.Id, c.Firstname });
foreach (var item in data)
{
var stringData = String.Format("{0}:{1}", item.Id, item.Firstname);
...
}