2012-03-15 4 views
0

linqでselectを返す際に使用するリストの中で、以下の内容について少し混乱しています。linqのselectクエリを返すベストプラクティス

1.IEnumerable 2.List 3.ObjectQuery 4. ConvertLinqtoDataTable

あなたはどちらを好むのですか?

現在、私たちはレコードを返す際にオブジェクトクエリを使用しています。

public ObjectQuery StationSelectByStationId(int stationid) 
    { 
     var query = from station in _iiqrEntities.Station 
        where station.StationId == stationid 
        select station; 

     return query as ObjectQuery; 
    } 

私はコードを標準化するようにあなたの推奨を使用します。 上記のコードに基づいて回答を参照してください。あなたはいつもあなたができる最も制限のデータ型を返す必要がありますよろしく

答えて

3

IQueryable<T>を返す必要があります。
これにより、消費者はインターフェイスをEFに結合することなく、SQLクエリに予測を追加できます。

1

感謝。これにより、将来の柔軟性が最大限に高まり、カップリングが減少します。

アーキテクチャによっては、LINQチェインを行う場合は、IQueryable<T>になる可能性があります。あるいは、DTOのよ​​うな強く型付けされたオブジェクトのコレクションをIEnumerable<T>として返すこともできます。

IEnumerableは、メモリ内で反復処理されるシーケンスを扱う場合に最適ですが、IQueryableではデータベースやWebサービスなどのメモリ不足の問題が発生します。

+0

いいえ; 'IQueryable'。これによりSQL連鎖が可能になります。 – SLaks

+0

@SLaks:はい、そうです。より具体的に私の答えを編集させてください。 – msigman

0

それは問題のデータのサイズとそれに何をしているかによって異なります。 IQueryableでは後でクエリを変更することができますが、複雑なクエリを使用する大規模なデータセットの場合、パフォーマンスが大幅に低下する可能性があります。このような状況では、リストを返して頭痛を避けることを好みますが、IQueryableを使用することを選択した場合、パフォーマンスが大幅に低下することなく評価されるようにする必要があります。