これは、結合のようなものです。あなたが言うとき:
基本的に執筆のより効率的な方法である
from customer in customers
join order in orders on customer.Id equals order.CustomerId
select whatever
:
from customer in customers
from order in orders
where customer.Id == order.CustomerId
select whatever
はあなたがなぜ見ていますか?最初の1つは、「お問い合わせプロセッサー、顧客と注文には、顧客IDと注文に保管された顧客IDの平等によって定義される特別な関係があります」と述べています。 2番目のものは、「デカルト製品を私に与えてください - すべての可能な顧客と注文の組み合わせ - それから意味を持たないものを除外します」と言います。彼らは同じ効果がありますが、前者はより効率的です。
しかし、複数の「from」句を使用して、デカルトの商品よりも魅力的なことを行うことができます。
from customer in customers
from address in customer.Addresses
select address
複数from
条項実際に「多くの選択」です:顧客が複数のアドレスを持つことができると仮定します。 、それらはシーケンスを取るさ、及び第一の配列のすべてのアイテムからの配列を製造する方法、及びが一緒すべての結果のシーケンスをマージします。
"select many"はシンプルですが非常に強力です。私たちは既に、「選択した多くの」を使って(遅いが正しい)結合操作を行うことができることを見てきました。実際には、あなたは十分に巧妙であり、時間と多くのメモリを無駄に気にしない場合は、すべての可能なクエリを作るために多くを選択することができます。例えば: - 彼らはある
from customer in customers
from c in (customer.City == "London" ?
new Customer[] {customer} :
new Customer[] { })
select c;
あなたがそうすることを夢中になるだろうが、where
とjoin
が実際に不要です:
from customer in customers
where customer.City == "London"
select customer
は、「どこで」、このようにせずに書くことができます選択した多くのものを書くより速く、短く、より効率的な方法です。