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在基本连接上有这么多麻烦?

谢谢。

E.F. NotSupportedException - Transition from LINQ2SQL

我不能告诉你为什么它在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);
    ...
}