私は学んF#
でおり、SQL 型プロバイダーで使用する計算式とクエリ式について読んでいます。私はいくつかの単純なタスクを実行していましたが、ある時点で (Union) 2 つのクエリを連結する必要がありました。最初に考えたのはyield
、シーケンスとリストについて読んだ後、次のようなクエリ式内で同じことを行うことでした。
query {
yield! for a in db.As select { // projection }
yield! for b in db.Bs select { // projection }
}
これは無効なコードでした。私の 2 番目のアプローチは、以下を使用してそれらを「連結」することでした。
seq {
yield! query {...}
yield! query {...}
}
または、Linq のConcat
関数を次のように使用します(query {...}).Concat(query {...})
。それを行う方法は、この質問の回答から来ました
上記のアプローチはどちらも 1 つの違いがありますが、使用seq
すると 2 つの SQL クエリが実行され、使用するConcat
と理解できるのは 1 つだけ実行されます。
私の質問はyield
、クエリ式でサポートされていないのはなぜですか?
編集:
さらに調査した後、私はMSDNのドキュメントにたどり着き、 andメソッドが実装されているのを見ましたが、Yield
andYieldFrom
メソッドは実装されていませんでした。これは今ではさらに混乱していますCombine
Delay