0

変換Entity Frameworkなしでサポートされていないメソッド/関数を含むクエリを実行するためのベストプラクティスについて知りたいです。SQL

例えば:

DataContext db = new DataContext();
Administrator admin = db.Administrators.Where(admin => admin.Username.ToString() == "test");

メソッドToLower()にはサポートされているSQL変換がないため、機能しません。

現在私はこれを行います:

DataContext db = new DataContext();
Administrator admin = db.Administrators.ToArray().Where(admin => admin.Username.ToString() == "test");

ただし、この種のクエリを実行するために管理者セットを配列に変換することは、パフォーマンスの面で非常に優れているとは思いません。

誰かがこれらの種類のクエリのベストプラクティスを教えてもらえますかEntity Framework

ありがとう、アレックス。

4

4 に答える 4

1

2つの選択肢-

  • ストアドプロシージャを作成してインポートします
  • を使用して結果をメモリにプッシュするToArray()と、必要なすべての方法を使用できます(最初の結果セットが小さい場合を除いて、パフォーマンスは向上しません)。

Entity Frameworkクエリプロバイダーは、メソッド呼び出しをSQLに変換する方法を知っている必要があります。独自のメソッドを開発することはできますが、サブクラス化することはできないと思います。そのため、独自のメソッドを追加するのは簡単ではありません。または、言い換えれば、血まみれの難しい!

恐らくあまり人気がないかもしれませんが、データクエリの真の核心にたどり着くとき、私はまだ多くのSPを使用しています。私の環境の動機の一部は、他の非EF環境が同様の動作を再現できる必要があるかどうかですが。

于 2012-07-05T10:15:54.387 に答える
0

次を使用できます。

DataContext db = new DataContext();
管理者admin=db.Administrators.Where(admin => admin.Username.Equals( "test"、StringComparison.InvariantCultureIgnoreCase));

それに加えて、エントリを1つだけフェッチする場合は、次を使用する必要があります。

DataContext db = new DataContext();
管理者admin=db.Administrators.SingleOrDefault(admin => admin.Username.Equals( "test"、StringComparison.InvariantCultureIgnoreCase));

また

DataContext db = new DataContext();
var admins = db.Administrators.Where(admin => admin.Username.Equals( "test"、StringComparison.InvariantCultureIgnoreCase));
var admin = admins.First();

ユーザー名が「test」の管理者が複数いる場合例外が発生する場所

于 2012-07-05T10:12:51.730 に答える
0

これを試して

Administrator admin = (from a in db.Administrators where a.Username == "test" select a).FirstOrDefault();
于 2012-07-05T10:16:34.620 に答える
-1

クラスにあるメソッドを使用しますEntityFunctions

于 2012-07-05T10:11:12.593 に答える