2

(名前列と番号列)を持つ顧客テーブルがあると仮定すると、ユーザーはクエリを実行して、1つの名前の番号を表示したり、制限がない場合はすべての番号を表示したりできます。

この例

    void DisplayNumbersOfName(string name)
     {
        using (dataclassDataContext db = new dataclassDataContext())
           {
               if(name=="")
               var Names = from ta in db.table_accounts

                           select ( ta );
                else
                Names = from ta in db.table_accounts
                           where ta.name = name
                           select ( ta );

        }
     }

メソッドが

より複雑な 'where ' WHERE with IF のみを変更したい

4

3 に答える 3

5

LINQ クエリは適切に構成され、クエリ式の構文を使用する必要がないという事実を利用する必要があります。そう:

// Fixing naming conventions as I go, to make the code more idiomatic...
using (DataClassDataContext db = new DataClassDataContext())
{
    IQueryable<YourDataType> query = db.TableAccounts;
    if (name != "")
    {
        query = query.Where(ta => ta.Name == name);
    }
    // Use query here...
}

ワルサーの解決策は別の実行可能な代替手段ですが、データベースで「これをクエリの一部として本当に必要とするか」を評価することを意味します-理解するのがやや難しいSQLになってしまいます。個人的には、特定のフィルターをクエリの一部にするかどうかを明示することを好みます。

于 2012-10-07T07:31:56.907 に答える
5
 void DisplayNumbersOfName(string name)
 {
    using (dataclassDataContext db = new dataclassDataContext())
    {
        var Names = from ta in db.table_accounts
                    where (String.IsNullOrEmpty(name) || ta.name == name)
                    select ( ta );

    }
 }

正直に確認していませんが、動作するはずです。

于 2012-10-07T07:34:15.690 に答える
-1
db.table_accounts.Where(p=>string.IsNullOrEmpty(name)||p.name = name);
于 2012-10-07T07:34:27.420 に答える