2009-05-11 8 views
3

私はSQLにLinqを使用していますが、古典的なSQLクエリを実行する必要があるクエリSQLを実行する方法がありますが、このクエリがどのテーブル/エンティティから生成されるかはわかりません。タイプを知らなくてもC#3.0でIQueryableを返すにはどうすればよいですか?

私は、どのテーブルからクエリが生成されるかわからないので、私は自分のIQueryableの型を知らないと思いますか?

しかし、私はこれを返す方法がわかりませんIQueryable?私は<T>を返そうとしましたが、動作しません。

ありがとうございます!

答えて

1

に役立ちます。これを実行するとIQueryable<T>を直接返すことができ、C#コンパイラは型推論を使用してコンパイル時にTが何であったかを判断できます。これは、Linq演算子のほとんどが、拡張メソッドとして実装されている以外は、どのように構築されているのかを効果的に示しています。例えば

、その型のデフォルトですリスト内のいずれかを削除する方法を検討:

public static IQueryable<T> FilterDefaults<T>(IQueryable<T> theSet) 
{ 
    IQueryable<T> query = 
     from t in theSet 
     where t != default(T) 
     select t; 

    return query; 
} 

を使用すると、C#でこれを呼び出すときに型推論を把握することができますので、今、あなたは<T>をオフに残すことができますコンパイル時にTはまだ強く型付けされる:

string[] myStrs = { "ABC", null, "", "123", null, "XYZ" }; 
var theFilteredStrs = FilterDefaults(myStrs); 
// should represent the sequence: "ABC", "", "123", "XYZ" 
// note null is missing because default(string) is null 

int[] myNums = { -1, 0, 3, 0, 42 }; 
var theFilteredNums = FilterDefaults(myNums); 
// should represent the sequence: -1, 3, 42 
// note 0 is missing because default(int) is 0 

これは基本的なタイプを使用していますが、アイデアは電源である(LINQツーSQLを含む)すべてのLINQの使用のために同じことを動作することを簡単な例でありますLINQのあなたが最終的にLINQ-to-SQLを使用するのか、それともLINQ-to-Objectsだけなのかは気にしません。

0

あなたが知っているとおりにすることはできません。あなたがタイプを知らないので、ジェネリックGeneric(つまりList)を返す方法はありません。あなたがやっていることで他の唯一のオプション(また、強力なLinqのサブセットをSql型に戻したい場合でも)あなた自身の型(すなわち、クラスまたは構造体)を作成し、リストを記入して返すことです...あなたが戻ってくる列について考えていると思いますので、それほど難しくはありません。

・ホープこれはあなたがメソッド内IQueryable<T>を構築し、この方法は、一般的な作ることができる タブ

関連する問題