2016-09-22 12 views
3
public IQueryable<CarVersion> GetCar(int carIdToSearch) 
{ 
    return _Dbcontext.CarVersion.Include("CarFactory"). 
      .Where(x => x.carId== carIdToSearch); 
} 

をフィルタリングところ私は2つの列バージョンとcarIdを持ってCarVersionテーブルを持っている任意のデフォルトの順序があります。バージョン列は主キーです。 1つのcarIdに複数のバージョンが存在する可能性があります。 CarFactoryテーブルにはcarVersionテーブルからの外部キーバージョンがあります。だから私は理解しようとしています。上記のクエリを実行すると、常に昇順に並べられた結果が得られます。それともプライマリキーに基づいていますか?またはそれは保証することができますか?私はMSのドキュメントを見ましたが、注文については何も言いません。LINQクエリでの句は、シーケンス

+0

注文を保証するものではありません。それはプロバイダによって異なる場合もあれば、異なる場合もあります。その順序が必要な場合は、LINQ '.OrderBy()'メソッドを使用することができます。 – Fabjan

答えて

4

結果は、LINQプロバイダによって異なります。 Linq-To-Objectsの場合、注文は安定しています(下記参照)。つまり、ソースシーケンスと同じになります。 Linq-To-Entitiesのようなデータベース駆動のLINQプロバイダの場合、その順序はあらかじめ決められていません。

特定の順序を保証するには、sqlにORDER BYが必要です。だから、LINQでOrderByが必要になります。

return _Dbcontext.CarVersion.Include("CarFactory"). 
    .Where(x => x.carId== carIdToSearch) 
    .OrderBy(x => x.Version); 
  • しかし、中にLINQ-TO-オブジェクト順序が常に同じになるという保証はありません。また、シーケンスのタイプによって異なります。 DictionaryまたはHashSetのようなコレクションを設定しても、herehereのように、注文がそのままであるとは限りません。
+0

ありがとうございます。それは役に立ちました。 – S52

関連する問題