我正在从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在基本连接方面遇到这么多麻烦?
感谢。
答案 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);
...
}