4

動的クエリを作成するためのヒントとコツを探しています。ユーザーがデータベーステーブルの10個のフィールドを検索できるようにするアプリケーションがあります。UIのどのフィールドに値が入力されているかに応じて、クエリはDBの追加フィールドで検索する必要があります。

現在、StringBuilderを使用してクエリを作成し、where句を追加しようとしていますが、これは本当に好きではありません。可能であればLINQを使用するなど、これを行うためのより良い方法があるかどうか疑問に思っています。

たぶん誰かがアイデアやより良いサンプルコードを持ち出すことができます。ありがとう、そして良い一日を!

4

1 に答える 1

8

LINQを使用すると、それは非常に簡単です。

IQueryable<User> users = db.Users;

if(name != null) users = users.Where(u => u.Name == name);
if(dept != null) users = users.Where(u => u.Dept == dept);
...

var page = users.OrderBy(u => u.Name).Take(100).ToList();

連続するたびWhere 、より多くのフィルターを使用してクエリが作成されます。まさにあなたが望むもの。

生のTSQLでは、StringBuilder不合理ではありません。完全にパラメータ化することを確認してください。これは、各用語にパラメーターを追加することを意味する場合があります。例えば:

...
if(name != null) {
    sql.Append(" and u.Name = @name");
    cmd.Parameters.AddWithValue("name", name);
}
if(dept != null) {
    sql.Append(" and u.Dept = @dept");
    cmd.Parameters.AddWithValue("dept", dept);
}
...
于 2013-03-23T08:31:00.360 に答える