E.F.NotSupportedException - 从LINQ2SQL过渡

时间:2013-03-18 00:20:27

标签: c# entity-framework exception linq-to-sql

我正在从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)我需要对我的解决方案中的每个pre-exisitng语句进行这种代码更改,以使其与EF一起工作;和

b)为什么当LINQ2SQL正常时,EF在基本连接方面遇到这么多麻烦?

感谢。

1 个答案:

答案 0 :(得分:0)

我不能告诉你为什么它在Linq2SQL中工作而不在Entity Framework中,但我可以帮助你解决问题。

我建议您使用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);
    ...
}