2016-03-22 6 views
-4

My GroupByはうまく機能しています。私は出力にOrder GroupBy Ascベースの2つのプロパティLINQを使用してC#

enter image description here

を取得、私はグループ名

ブラウンカラーブロックをソートする必要があり、グループを表しています。

ブラウンカラーブロック内のレッドカラーボックスは、

  1. ピーター・ブロック(ブラウンボックス)最初
  2. ラジ・ブロック(ブラウンボックス)(
  3. セカンドサニーブロックを来るべき来るべきマネージャを表しブラウンボックス)第三に来る必要があり

ボス(マネージャー)とアシスタントすることにより、各ブロックする必要がありグループ(ボス SIDを持っていません)。 GroupByの後、グループ内の名前はSorted Orderになります。 アシスタント名もソート順になります。

モデル・クラス:

public class Person 
{ 
    public int ID { get; set; } 
    public int SID { get; set; } 
    public string Name { get; set; } 
    public string Department { get; set; } 
    public string Gender { get; set; } 
    public string Role { get; set; } 
} 

public class Boss 
{ 
    public int ID { get; set; } 
    public int SID { get; set; } 
    public string Name { get; set; } 
    public string Department { get; set; } 
    public string Gender { get; set; } 
    public string Role { get; set; } 
    public List<Person> Employees { get; set; } 
} 

主な機能ソースコード:

void Main() 
{ 
    List<Boss> BossList = new List<Boss>() 
    { 
     new Boss() 
     { 
      ID = 101, 
      Name = "Sunny", 
      Department = "Development", 
      Gender = "Male", 
      Role = "Manager", 
      Employees = new List<Person>() 
      { 
       new Person() {ID = 101, SID = 102, Name = "Peter", Department = "Development", Gender = "Male", Role = "Assistant"}, 
       new Person() {ID = 101, SID = 103, Name = "Emma Watson", Department = "Development", Gender = "Female", Role = "Assistant"}, 

      } 
     }, 
     new Boss() 
     { 
      ID = 104, 
      Name = "Raj", 
      Department = "Development", 
      Gender = "Male", 
      Role = "Manager", 
      Employees = new List<Person>() 
        { 
         new Person() {ID = 104, SID = 105, Name = "Kaliya", Department = "Development", Gender = "Male", Role = "Assistant"}, 
         new Person() {ID = 104, SID = 103, Name = "Emma Watson", Department = "Development", Gender = "Female", Role = "Assistant"}, 

        }, 
     }, 
     new Boss() 
     { 
      ID = 102, 
      Name = "Peter", 
      Department = "Development", 
      Gender = "Male", 
      Role = "Manager", 
      Employees = new List<Person>() 
        { 
         new Person() {ID = 102, SID = 105, Name = "Kaliya", Department = "Development", Gender = "Male", Role = "Assistant"}, 
         new Person() {ID = 102, SID = 103, Name = "Emma Watson", Department = "Development", Gender = "Female", Role = "Assistant"}, 

        } 
     } 
    }; 

    List<Person> EmpList = BossList.SelectMany(i => 
     new[] { 
       new Person() 
       { 
        ID = i.ID, 
        SID = i.SID, 
        Name = i.Name, 
        Gender = i.Gender, 
        Department = i.Department, 
        Role = i.Role 
       } 
     }.Concat(i.Employees) 
    ).ToList().GroupBy(s => s.ID).SelectMany(h => h.GroupBy(g => g.SID).SelectMany(u => u.OrderBy(k=> k.Name))).ToList(); 
} 
+0

を私は右のあなたを得るのであれば、あなただけのグループを並べ替えることがしたいですか?あなたが望む結果が得られれば、あなたの写真はどのように見えるかを追加できますか? –

+0

@ Nitro.de - スクリーンの頂点が期待される出力を与えていません。イエロークォートで述べたように、出力画面の変更が必要です。 –

答えて

-1

あなたは二次ソートを適用することにより、ご注文後ThenBy拡張メソッドを追加することによって行うことができます。実際、ThenByは、複数のプロパティをソートするために複数回呼び出すことができます。私はコードの最後の行を修正して、これをどのように達成できるかを示しました。

).ToList().GroupBy(s => s.ID).SelectMany(h => h.GroupBy(g => g.SID).SelectMany(u => u.OrderBy(k=> k.Name).ThenBy(l => l.<<secondproperty>>))).ToList(); 
+0

その失敗...一度それを一度チェックしてください... –

+0

@ B.Balamanigandanどのようなエラーがありますか? – user449689

+0

が失敗するとエラーが発生しません。それはちょうど私の出力のように戻ります。適切なソースコードを使用してあなたの答えを与えてください... –

-1

データ構造はすでにグループを確立しています。再グループ化する必要はありません。

List<Person> result = (
    from boss in BossList 
    order by boss.Name 
    let orderedEmployees = boss.Employees.OrderBy(emp => emp.Name) 
    let bossPerson = new Person(boss) 
    let people = new List<Person>() { bossPerson }.Concat(orderedEmployees) 
    from person in people 
    select person).ToList(); 

あなたはラムダ構文好む場合:

List<Person> result = BossList 
    .OrderBy(boss => boss.Name) 
    .SelectMany(boss => { 
    IEnumerable<Person> orderedEmployees = boss.Employees.OrderBy(emp => emp.Name); 
    Person bossPerson = new Person(boss); 
    return new List<Person>() { bossPerson }.Concat(orderedEmployees); 
    }) 
    .ToList(); 
+0

Person Model Classにはパラメータコンストラクタはありません。親切に一度plsを確認してください。 –

+0

同等のコードを使用してください。ボスを質問のPersonに変換して、それを行う方法を知っている。 –

+0

それは私にエラーを与える...私は解決策を見つけた...あなたの答えをありがとう... –

関連する問題