2011-03-31 8 views
2

を照会可能となるように、私はしかし、私はSecondClassがほぼ同じ公開しFirstClassのラッパークラスですIQueryable<SecondClass>を、公開したいIQueryable<FirstClass>データソースを使用して、クラス/ APIを持っていますしかし、さまざまな理由から、無関係な基底クラスから継承する必要があります。たとえば:「選択」または「ラッピング」のIQueryableそれはまだ

// My API 
void IQueryable<SecondClass> GetCurrentRecords() 
{ 
    return from row in dataSource 
      /* Linq query */ 
      select new SecondClass(row); 
} 

// User of my API 
var results = GetCurrentRecords().Where(row => row.Owner = "Mike"); 

は今、私は単に私が効率的にAPIユーザーのクエリに基づいてデータベースを照会することIQueryable「true」を公開するしかしAsQueryableを使用することにより、上記のコンパイルを行うことができます。

私は(私のラッパーのIQueryableの実装はSecondClassFirstClassの性質との関係を理解する必要があります)、これは簡単ではないことを知っている、そしてそれはSelect機能とは何の関係もないことを、それはそれのようです可能でなければならない。

どうすればよいですか?

注:私の代わりに私のAPIは単なるAPIのユーザーは、そのクエリを作成「完了」したときのためにSecondClassFirstClassを変換するためのヘルパーメソッドと一緒にFirstClassを公開することができることを知っているが、それは汚い感じていると私はしないでください私の生成クラスをこのように公開する考え方のように。また、私は純粋に学術的な観点から上記のことをどうやって行うのか知っていたいと思います。

+0

この質問はあなたが含まれていないコードなしで意味がありません。 L2Eはすでに 'ObjectQuery 'に対してこれを行います。あなた自身のコード( 'dataSource'を生成していないかもしれませんが、あなたはそれを示していません) –

+0

@Craig私はそれに従わないのですか?' dataSource'は 'ObjectQuery – Justin

+0

'dataSource'が' ObjectQuery 'の場合、L2Eはパラメータ化されたコンストラクタをサポートしていないため、クエリは実行時に失敗します。すでに「IQueryable 」を返し、SQLのサポートでさらなる構成をサポートしている「LINQ to Entities projections」(http://blogs.teamb.com/craigstuntz/2009/12/31/38500/)が「magic」です。 –

答えて

0

おそらく、IQueriableではなくExpressionを返す必要があります。次に、式を変更して、LINQに最終的なExpressionオブジェクトからクエリを生成させることができます。例はここにあります:http://msdn.microsoft.com/en-us/library/bb882637.aspx

関連する問題