1

c# 2.0 言語機能の「述語」について学習するためのオンライン チュートリアルはありますか?

述語を linq to sql と共に使用してクエリを変更する方法を学ぼうとしています

私がやろうとしているのは、顧客のテーブルをクエリし、変化する基準に基づいてフィルタリングすることです。例えば

  • zipcode = 90210 を持つすべての顧客を見つける
  • 男性の顧客をすべて見つける
  • 男性でかつ > 郵便番号 = 90210 であるすべての顧客を検索します。

今、私はかなり間違っていると感じる if/else ステートメントを使用してこれを行っています

また、他のフィルターを追加する必要がある可能性があるため、この問題に対する柔軟な解決策が必要です。これは、何も壊さずに簡単に拡張できます (オープン クローズドの原則だと思います)。

4

2 に答える 2

1

述語は、次のシグネチャを持つ単純なメソッドです。

bool Predicate<T>(T item)

これは、タイプ T のオブジェクトによって検証できるかどうかを表す条件を表します。

.Where句内の列挙型をフィルタリングするためにリンクで使用されます。

ブール値を返すラムダを使用することもできます:

item => item.Nickname == "ThinkBeforeCoding";
于 2009-02-11T12:24:13.070 に答える
0

(ところで - LINQ-to-SQL で使用されるラムダベースの述語は、C# 2.0 ではなく、C# 3.0 / .NET 3.5 です)

では、具体的に何をしようとしているのでしょうか。

述語は単なるフィルターです (デリゲートまたは式として)。LINQ-to-SQL プロバイダーが処理できる関数 (これら)、または構成可能な関数としてデータ コンテキストにマップされた UDF ( )と組み合わせない限り、TSQL などを直接変更することはできません。FunctionAttribute

最も簡単に:

男性かつ > 郵便番号 = 90210 の場合

var qry1 = from cust in ctx.Customers
          where cust.Gender == 'M' && cust.Zip = '90210'
          select cust;

var qry2 = from cust in ctx.Customers
          where cust.Zip = '90210'
          select cust;

または、自明ではない例(動的検索フォーム/個別に組み合わせる)の場合

IQueryable<Foo> query = ctx.Customers;
// note "gender" here is "char?" for this example
if(gender != null) query = query.Where(x=>x.Gender == (char)gender);
if(zip != null) query = query.Where(x=>x.Zip == zip);

手動で式ベースの述語を作成することもできますが、それは手間がかかり、Expression APIの知識が必要です。

于 2009-02-11T10:27:00.667 に答える