2011-02-08 5 views
4

メタテールまたはテーブル名を使用してLINQで動的クエリを作成する方法はありますか?テーブル名またはメタテーブルを使用したクエリテーブル - LINQ

foreach (var metaTable in db.Mapping.GetTables()) 
{ 
    var queryType = metaTable.RowType.Type; 

    var test = from q in db.GetTable(queryType) 
       select q; 
} 

このような方法がありますか?上記の試行でエラーが発生します。

ソースタイプ 'System.Data.Linq.ITable'のクエリパターンの実装が見つかりませんでした。 「選択」が見つかりません。範囲変数 'q'の型を明示的に指定することを検討してください。

おかげで、 クリス

+0

dbはデータコンテキストです –

+0

このループはデータコンテキストの各テーブルからすべてを選択できるようにしてください –

+0

短い答えは「はい」ですが、おそらく 'MakeGenericMethod'のようなことがたくさんあります。 .. –

答えて

3

は「長い答えは」厄介な表現のコードがたくさんある:あなたはすべてが強く型付けされている場合、コンパイラは唯一それをしないので、最初からクエリの式ツリーを構築する必要があります。ただし、すべての行を取得するだけの場合は、ITableインターフェイスが既にIEnumerableであるため、

var test = db.GetTable(queryType).Cast<object>(); 

と書いてください。今度は、まだタイプのないオブジェクトのシーケンスを理解する必要があります。

あなたは何をしたいのか、その理由を教えていただけますか?

+0

私は、データコンテキストに基づいて動的なカスタムクエリを構築しようとしています。あなたの答えにも感謝しています。本当に役に立ちます。私はそれを信じて、パラメータ名はユーザの入力に基づいてクエリを作成します。 linq動的クエリの場合は –

+0

Google。 query.OrderBy( "fieldName")のような文字列からクエリを構築するためのヘルプがあります。 – usr

1

System.Data.Linq名前空間への参照は含まれていますか?それがあなたの欠けている場合は、おそらく私はLINQの拡張メソッドは、それから来ていると思うので、このエラーが発生します。

+0

これは正解です。質問に投稿されたコードはそのまま動作するはずです。 –

関連する問題