0

EFからEFに移行しLINQ2SQLていて、いくつかの基本的なラムダ式で問題が発生しています。

次の例では、クライアント関連データの基本的なリストを取得しようとしています。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

Entity Frameworkではなく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 に答える