0

これまでは、データベース アクセスに従来の ADO.NET モデルを使用してきました。私はそれにとても満足していると言わざるを得ません。でも、最近はEntity Frameworkもよく耳にするので、やってみようかなと思いました。実際、私を駆り立てた主な理由は、ストアド プロシージャの WHERE 句を作成する方法を見つける必要があったことです。古典的な方法では、次のいずれかを行う必要があります。

  1. ユーザー入力に基づいてクライアント側で WHERE 句を作成し、それを VARCHAR2 引数としてストアド プロシージャに送信し、WHERE 句を SQL の主要部分と連結して、文字列全体を EXECUTE_IMMEDIATE 関数に渡します。私は個人的にそうしなければならないのが嫌いです。
  2. ストアド プロシージャ内では、非常に多くの SQL ステートメントが構築されます。つまり、WHERE 句を構成する可能性のあるすべての組み合わせを考慮する必要があります。これは最初のケースよりも悪いようです。

EF によってストアド プロシージャも使用できるようになったことは知っています。しかし、WHERE 部分を動的に構築することは可能でしょうか? EFはどうにかして私を救うことができますか?

4

1 に答える 1

1

はい、Linq で動的クエリを使用できます。

  1. 動的クエリ ライブラリ

スコット・グーの例から

var query = Northwind.Products.Where("Lastname LIKE "someValue%");

またはいくつかの複雑なクエリ

var query =
    db.Customers.
    Where("City = @0 and Orders.Count >= @1", "London", 10).
    OrderBy("CompanyName").
    Select("new(CompanyName as Name, Phone)");

またはこの回答から Where句を動的に。

var pr = PredicateBuilder.False<User>();
foreach (var name in names)
{
    pr = pr.Or(x => x.Name == name && x.Username == name);
}
return query.AsExpandable().Where(pr);
于 2013-02-19T08:37:10.700 に答える