2017-06-01 8 views
2

次のサンプルクラスがあります。OrderBy子コレクション固有のカテゴリ

public class Parent 
{ 
    public int Id { get; set; } 
    public List<Child> Children { get; set; } 
} 

public class Child 
{ 
    public string Category { get; set; } 
    public decimal? Price { get; set; } 
} 

および以下のサンプルデータ。

var parents = new List<Parent>() 
{ 
    new Parent() { 
     Id = 1, 
     Children = new List<Child> 
     { 
      new Child {Category = "Item 1", Price = 10 }, 
      new Child {Category = "Item 2", Price = 30 }, 
      new Child {Category = "Item 3", Price = null }, 
      new Child {Category = "Item 4", Price = 5 }, 
      new Child {Category = "Item 5", Price = 20 } 
     } 
    }, 
    new Parent() { 
     Id = 2, 
     Children = new List<Child> 
     { 
      new Child {Category = "Item 1", Price = null }, 
      new Child {Category = "Item 2", Price = null }, 
      new Child {Category = "Item 3", Price = null }, 
      new Child {Category = "Item 4", Price = null }, 
      new Child {Category = "Item 5", Price = null } 
     } 
    }, 
    new Parent() { 
     Id = 3, 
     Children = new List<Child> 
     { 
      new Child {Category = "Item 1", Price = 100 }, 
      new Child {Category = "Item 2", Price = 300 }, 
      new Child {Category = "Item 3", Price = null }, 
      new Child {Category = "Item 4", Price = 50 }, 
      new Child {Category = "Item 5", Price = 200 } 
     } 
    }, 
}; 

私は特定のカテゴリにChildの価格でParentオブジェクトを注文するLINQを使用することができますどのように、 『項目3』を言うの?

+0

あなたはこのような何かを意味ですか? parents.OrderBy(x => x.Children.Where(y => y.Category == "Item 3")。Max(z => z.Price)); –

+0

それは、ありがとう、それをしました。私は答えとして自由に投稿してください、私は受け入れます。 – erdinger

答えて

1

あなたは、次の操作を行うことができます

parents.OrderBy(x => x.Children.Where(y => y.Category == "Item 3").Max(z => z.Price)); 
1

はこれを試してみてください:

var resultSet = parents.OrderBy(o => o.Children.Where(e => e.Category == "Item 3").Max(i => i.Price)).ToList(); 
+0

私は彼が子供の財産に基づいて親を分類することを求めていると信じていますが、これは彼に子供のリストを与えるでしょう。 –

+0

@FredyTrebouxは親のリストを返すように編集しました。 –

+0

ありがとうございます。しかし、 'Min()'や 'Max()'がなければ、少なくとも一つのオブジェクトはIComparableを実装しなければなりません。 – erdinger

関連する問題