0

我正在从LINQ2SQLEF 过渡,并且在使用一些基本的 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 字段是一个整数。

我已经能够通过ToArray()在 db.Clients 之后添加一个来修复错误。

有人可以解释一下如果..

a) 我需要对解决方案中的每个预先存在的语句进行这种代码更改,以使其与 EF 一起使用;和

b) 为什么 EF 在LINQ2SQL正常的情况下在基本串联方面会遇到这么多麻烦?

谢谢。

4

1 回答 1

0

我不能告诉你为什么它在 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);
    ...
}
于 2013-03-18T00:50:50.640 回答