2010-12-21 1 views

答えて

8

だから、そこここで起こってたくさんあるが、内部で始めることができます:

Func<TEntity, bool>は一般的なもので、どのタイプ、入力を受け取り、デリゲートであるので、我々はちょうどTEntityそれを呼び出します。何の制約もなく、これは何でもかまいませんが、強く型付けされたものです。

アウトレベルはExpression<Func<TEntity, bool>>です。これは表現ツリーであり、入力を受け取りブールを返すデリゲートとして強く型付けされています。言い換えれば、それは関数を表す式ツリー(コンパイラコースに戻って考える)です。

最後に、最外レベル:TEntity Single(Expression<Func<TEntity, bool>> predicate)は、式の形で述語関数をとるSingleと呼ばれるメソッドです。返されるのは、その関数に渡されるのと同じ型です。

本質的には、Singleが式をとり、それをコンパイルして一連のデータに対して実行し、述語式に一致するコレクションの最初のエンティティを返します。

希望すると便利ですか?

+0

あなたの答えは、私が今削除したものよりもはるかに優れていると説明しています。私は自分自身を読もうとすると混乱しました! hehe –

+0

若干の明確化は、FirstがFirstとは違った複数の結果を見つけたら例外をスローすることです。 – MerickOWA

0

expressionこれは、任意の "TEntity"(呼び出し元のコレクションによってこのインスタンスで定義されている)を取得し、boolを返す代理関数を指定するために使用されます。実際には、デリゲートは、ラムダ関数使用して指定されている:あなたの例では

items.Single(i => i.Id == 1); 

を、単一の機能は、私はすべての制限を持っていないと信じてTEntityのジェネリックコレクション(に適用される拡張メソッドであります - オブジェクトでなければなりません)。したがって、TEntityの型は、呼び出すコレクションに基づいて推測されます。

+1

マイナーニットを選ぶだけです。実際にラムダ式ではありません。これは、ほとんど常にラムダとして渡される「Delegate」型です。 –

関連する問題