2009-07-17 12 views

答えて

5

のようにそれはあなたがクエリに追加の「演算子」を追加することができますを意味し、チェーンクエリをデイジーできることを意味だと思います。非常に効率的に行うことができるので重要です。

var employees = GetEmployees(); 

、もう1つはすべてのマネージャを返すようにすることを使用する別の方法:たとえば

、あなたは従業員のリスト(可算)を返すメソッドを持っているとしましょう

IEnumerable<Employee> GetManagers() 
{ 
    return GetEmployees().Where(e => e.IsManager); 
} 

ますその機能を呼び出して退職に近づいているマネージャーを取得し、次のようなメールを送信することができます:

foreach (var manager in GetManagers().Where(m => m.Age >= 65)) 
{ 
    SendPreRetirementMessage(manager); 
} 

ポップクイズ:従業員リストを何回繰り返しますか?答えは正確にはです。操作全体はまだO(n)です!

また、私はこのための別の方法を持っている必要はありません。私はすべて一つの場所にこれらのステップを使用してクエリを構成できます。

これについて一つのクールな事は、私が変えることができるということです
var retiringManagers = GetEmployees(); 
retiringManagers = retiringManagers.Where(e => e.IsManager); 
retiringManagers = retiringManagers.Where(m => m.Age >= 65); 
foreach (var manager in retiringMangers) 
{ 
    SendPreRetirementMessage(); 
} 

は私が含まや内部の組成物の一部を含めることができないことを、実行時にようになっていますifブロックでは、実行時に特定のフィルタを使用するかどうかの決定が行われ、すべてがまだ素敵できれいになります。

+0

ニースの説明、1 –

+0

正確に一度一部えっ、その後、コンポーザのペイオフのですか? – Larsenal

+0

その一部。残りの部分は、 "GetEmployees()"や "GetManagers()"のようなメソッドを使用して、より複雑な新しいクエリーを構築(作成)するための効率的な方法として使用できます。 linqがなければ、各方法の従業員リストで最初から始めなければならないでしょう。 –

4

私はそれはあなたがこの

var peterJacksonsTotalBoxOffice 
    = movies.Where(movie => movie.Director == "Peter Jackson") 
     .Sum(movie => movie.BoxOffice); 
関連する問題