2011-10-25 12 views
0

動的なLINQ JOINクエリを実行する必要があります。動的なことは、私が参加しようとしている列の数がランタイムの前に分かっていないということです。私は、どの関係(テーブル)が結合の左右にあるか分からない。最後に、私はプログラムの実行前に結合のタイプを知らない(INNER/OUTER)。多くの柔軟性、多くの問題。SilverlightとWPFのLINQの動的JOIN

WPFでは、stringLINQステートメントをコンパイルすることができます。 Silverlightの場合は簡単ではありません(Microsoft.CSharp名前空間がありません)。

この問題を解決する最も簡単な方法は、文字列をLINQにコンパイルすることです。今私はWPFとSilverlightの両方で働くソリューションを用意したいので、それについてはわかりません。あなたはなにか考えはありますか?

事前に感謝の手紙をありがとうございます。

+0

LINQに外部結合はありません。そして興味のないところで、LINQステートメントに文字列をどのようにコンパイルしていますか? – svick

+0

@svick、about:aからAへの結合Bの新しい{a.k}のBの結合は、C.DefaultIfEmpty()の...からxから新しい{k = b.c}をCに置き換えます。このようにして、私はまだ外部結合を得ることができます。 – Jamie

+0

@svickには、オープンソースコンパイラ(LINQ Compiler)があります。 – Jamie

答えて

0

あなた自身の質問に答えるのはうれしくないかもしれませんが、私はjoinの両面からオブジェクトを含む追加のクラスを定義することで、別の方法で問題を解決しました。次に、これらの比較は、オーバーライドされたEquals()およびGetHashCode()メソッドで行われます。私の場合は魅力的です:-)

とにかくお返事ありがとうございます。

0

LINQは実際には実行時よりもコンパイル時間のクエリを意図しています。表現を構築することの痛みは、あなたが達成しようとしているかもしれない機能を上回る可能性があります。

LINQ to Databasesを実行する場合は、LINQではなくEFとEntitySqlを使用することを検討してください。実行時に式ツリーを構築するのではなく、文字列としてエンティティクエリを作成する必要があります。

+0

ダイナミックLINQについてはどうですか?あなたはそれを使って機能を達成することは可能だろうと思いますか? – Jamie

+0

私はこの時点でダイナミックLINQライブラリではあまり働いていませんが、コンパイル時に列が分からないときには、戻り値の型(IEnumerable のT)をどのように指定するのだろうと思います。私はあなたがIEnumerable を使用していると仮定します。 EntitySqlでは、 'context.CreateQuery (entitySQL)'を使って文字列を解析し、DbDataRecordを消費することができます。 –

+0

返品の種類がわからないのはなぜですか?これは、例えば、select文で指定された列を持つFlattenedTypeになります。 – Jamie