1

linq to エンティティで使用すると異なる動作をする linq to sql 用の関数を作成する方法はありますか? AsQueriable を使用したくありません。SQLサーバーでできるだけ多くの計算をしたいからです。

例:

var UserIDs = Users.Select(x=> ConvertToString(x.UserID));

linq to sql の場合、コードは次のようにする必要があります。

public string ConvertToString(int id)
{
    return SqlFunctions.StringConvert((double?)id);
}

エンティティへの linq の場合、コードは次のようにする必要があります。

public string ConvertToString(int id)
{
    return id.ToString();
}
4

2 に答える 2

0

SqlFunctionsはEntityFramework4以降で使用できます。あなたの例では、アプリケーション層で変換を行う必要はありません。

http://blogs.microsoft.co.il/blogs/gilf/archive/2009/05/23/calling-database-functions-in-linq-to-entities-in-entity-framework-4.aspx

于 2012-12-17T16:26:48.317 に答える
0

Linq-to-Entites ではConvertToString、とにかくクエリで呼び出しを使用することは許可されないため、これは勇敢ですが、実りのない努力です。その理由は、L2E クエリ内のすべてのステートメントは、クエリ プロバイダーによって SQL に変換可能でなければならない式でなければならないからです。そして (もちろん) 任意のメソッドに対する組み込みの変換はありません。ここでは、L2E は非常に制限されています。次のようなほとんどのネイティブ .Net メソッドを使用することさえできません。

Users.Select(x=> Convert.ToString(x.UserID)); // NotSupportedException

Linq-to-Sql は、この点でもう少し寛大です。ステートメントを適切に実行します。しかし、共通点を探しているので、それは役に立ちません。ボトルネックはL2Eで狭いボトルネックです。

于 2012-12-17T21:46:38.957 に答える