2016-12-10 5 views
2

関連オブジェクトの属性で注文しようとしています。ほんの一例として、これが状況です。関係を持つ動的Linqを使用するOrderBy

public class Publication 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public List<Product> Products { get; set; } 
} 

public class Product 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public int PublicationId { get; set; } 
    [ForeignKey("PublicationId")] 
    public Publication Publication { get; set; } 
    public int Category { get;set; } 
} 

は今、私は製品のカテゴリー= 1で、すべての出版物を取得し、パブリケーションIDの降順で注文する必要があります:

IQueryable<Publication> query = db.Publications.Where("Products.Any(Category = 1)"); 
List<Publication> list = query.OrderBy("Id desc").ToList(); 

これは素晴らしい働いている私は、この2つのクラスを持っています!しかし、どのように出版物副産物のカテゴリー(descまたはasc)をDynamic Linqを使って注文することができますか?

+0

OderByDescendingだけではできませんか? (https://msdn.microsoft.com/en-us/library/bb534861(v=vs.110).aspx) – Clueless

+0

注文(ascまたはdesc)は問題になりません。問題は、関係によって(ascまたはdescで)順序付ける方法に関するものです。この場合Category(製品から) –

+1

'Publication'には1つ以上の製品があり、したがってカテゴリがあります。まず、カテゴリのコレクションをソートする方法を定義する必要があります。 –

答えて

0

私はSystem.Linq.Dynamicを使用してそれを行う方法を発見していないが、Linq用として、これはここで

var query = publications.OrderByDescending(p => p.Products.Select(x => x.Category).FirstOrDefault()).ToList(); 

に動作しますが、テストクラスである:

var publications = new List<Publication> 
     { 
      new Publication 
      { 
       Products = new List<Product> 
       { 
        new Product {Category = 5}, 
        new Product {Category = 6}, 
        new Product {Category = 7} 
       } 
      }, 
      new Publication 
      { 
       Products = new List<Product> 
       { 
        new Product {Category = 2}, 
        new Product {Category = 3}, 
        new Product {Category = 4} 
       } 
      }, 
      new Publication 
      { 
       Products = new List<Product> 
       { 
        new Product {Category = 8}, 
        new Product {Category = 9}, 
        new Product {Category = 10} 
       } 
      } 
     }; 

     var query = publications.OrderByDescending(p => p.Products.Select(x => x.Category).FirstOrDefault()).ToList(); 

     query.ForEach(x => Console.WriteLine(x.ToString())); 

出力されました:

8 , 9 , 10 
5 , 6 , 7 
2 , 3 , 4 

ご覧のとおり、内部ではProductsを注文していません。

+0

ありがとう、私は動的Linqでこれが必要です。 –

+0

さて、私はそれを見て、あなたの注文基準は何ですか?しかし、単に好奇心の理由から、なぜあなたは "普通の"ものを使用することができますダイナミックLinq? –

+0

私はwebapiのurlから文字列クエリを構築しています。これはすべて動的に行われます。すべてそれは大丈夫に動作しています。私はプロジェクトを完了するためにこれを必要とします。あなたの注文は大丈夫です。ネストされた商品カテゴリに基づいてascまたはdescで注文された出版物。 –

関連する問題