2011-10-19 6 views
0

EFによって返されたエンティティの内部コレクションを1つのクエリで並べ替えるにはどうすればよいですか?EFから返されたエンティティで内部リストをソートする方法は?

var orders = DataContext.Orders 
      .Where(o => o.BatchOrderId == batchOrderId) 
      .OrderBy(o => o.SequenceNo) 
      .ToList(); 

var bmo = DataContext.BatchOrders 
    .Include("Track") 
    .Include("Customer") 
    .OfType<BatchMoneyOrder>() 
    .AsExpandable() 
    .Where(o => o.Id == batchOrderId) 
    .FirstOrDefault(); 

bmo.Orders = orders; 

をが、これはこれを行うための効果的な方法ではないでしょう。

public abstract class BatchOrder 
{ 
    //.. 
    public virtual ICollection<Order> Orders { get; set; } 
    //.. 
} 

私はこのような何かを行うことができます。 this solutionもチェックしましたが、とにかく動作しません。

+0

このスレッドをご覧ください: http://stackoverflow.com/questions/3471588/how-to-sort-a-collection-based-on-a-subcollection-property、 http://stackoverflow.com/質問/ 4156949/ef4-linq-ordering-parent-and-all-child-collections-eager-loading-include、 http://stackoverflow.com/questions/3565249/ordering-sub-items-within-ordered Entity-in-a-Linq-to-Entity-Query – Mentoliptus

答えて

0

現在、EFは、Includeステートメント内のロジックを実行する方法をサポートしていません。うまくいけば、私たちはこの機能を許可されますが、SQLには1つのクエリで複数の結果セットを返す方法がないため、パフォーマンスに大きな違いはありません。

あなたの解決策は、遅延/熱心な読み込みを制御することができるので、それと同じ効果があります。もう1つの設定は、OrdersコレクションをSortedコレクションにすることで、SQLではなくクライアントで並べ替えを行うことです。