1

戻り値の型がTableである関数があります

このコードは機能しません。IEnumerable を Linq.Table ** として返したいだけです

 public static System.Data.Linq.Table<Products> GetProducts()
    {
        MyContext mc = new MyContext();

        Table<Products> ret = null;
        // Or   Table<Products> ret = mc.GetTable<Products>();

        ret.AttachAll<Products>(mc.GetTable<Products>()
                                  .OrderBy(p => p.ProductID).Take(1));

        return ret;
    }

ここで、IEnumerable クエリを System.Data.Linq.Table にキャストしたいと考えています。

(戻り値の型を変更できると言うかもしれませんが、問題はそれが可能かどうかです。GetTable() のような関数をオーバーライドできますか?)

4

1 に答える 1

1

できません。このTable<TEntity>クラスは、IQueryable<T>インターフェイスの実装を提供するために存在します。そこには実際の項目はありません。これは、解釈され、SQL に変換されてから SQL サーバーに送信される実装を提供するために、DataContextクラスによって公開される単なるルートです。IQueryable<T>

IEnumerable<T>インターフェイスを実装している場合は、繰り返し実行している実体化された結果セット (またはメモリ内コレクション) が既にある可能性があります。IQueryable<T>解釈するものがないため、実装を行うメリットはありません。必要なものはすべて、すでにメモリ内にあります。

IEnumerable<T>とは言うものの、実装から通常の拡張メソッド/クエリ構文を使用する方が、 Table<TEntity>.

于 2012-08-05T04:46:40.217 に答える