2017-07-17 91 views
-1

這裏父類在子類中有子類我們有名稱如何使用子類的名稱屬性將父列表作爲order。我用pq.OrderBy(z => z.Class1.Name!= null).ToList();但該列表未按預期排序。如何通過子類屬性來完成父類的列表?

class Program 
     { 
      static void Main(string[] args) 
      { 
       List<Parent> pq = new List<Parent>() { 

        new Parent() { Class1=new Child() { Name="d" } }, 
        new Parent() { Class1=new Child() { Name="s" } }, 
        new Parent() { Class1=new Child() { Name="y" } }, 
        new Parent() { Class1=new Child() { Name="r" } }, 
        new Parent() { Class1=new Child() { Name="b" } }, 
        new Parent() { Class1=new Child() { Name="a" } } 
       }; 

       var assa = pq.OrderBy(z => z.Class1.Name != null).ToList(); 
      } 
     } 

     public class Parent 
     { 
      public Child Class1 { get; set; } 
     } 

     public class Child 
     { 
      public string Name { get; set; } 
     } 
+0

你嘗試過什麼?這似乎是'OrderBy'的一個非常簡單的使用,所以知道你已經嘗試了什麼以及你在哪裏遇到了問題(編譯問題,運行時異常,沒有正確排序等)會很有用。 – Chris

+4

'pq.OrderBy(z => z.Class1.Name)'? – David

+0

對不起,如果問題是愚蠢的我是新來的LINQ –

回答

1

使用簡單地作爲OrderBy函數的調用的參數屬性Name,你會得到你想要的結果:

var assa = pq.OrderBy(z => z.Class1.Name).ToList(); 

在你的代碼的問題是,你給一個布爾值標準,該標準是用於確定排序。由於您列表中的所有元素都會根據此標準進行檢查,所以會返回true - >順序保持不變。您可以通過將最後一項的名稱設置爲null來進行測試。

new Parent() { Class1=new Child() { Name="d" } }, 
new Parent() { Class1=new Child() { Name="s" } }, 
new Parent() { Class1=new Child() { Name="y" } }, 
new Parent() { Class1=new Child() { Name="r" } }, 
new Parent() { Class1=new Child() { Name="b" } }, 
new Parent() { Class1=new Child() { Name=null } } 

在這種情況下,原來的查詢將導致最後一個項目的排序爲第一個

var assa = pq.OrderBy(z => z.Class1.Name != null).ToList(); 
+0

@BhuvaneshNarayanasamy你怎麼測試它? 'pq'仍然具有相同的順序。返回列表'assa'將得到有序的元素 –

2

如果你只是想要一個有序的列表,你可以使用這個:

var assa = pq.OrderBy(p => p.Class1.Name).ToList(); 

如果可能Class1屬性爲空使用此:

var assa = pq.Where(p => p.Class1 != null).OrderBy(p => p.Class1.Name).ToList(); 

如果你想擁有這些對象,其中Class1在產生List的到底是空:

var assa = pq.Where(p => p.Class1 != null).OrderBy(p => p.Class1.Name).ToList(); 
assa.AddRange(pq.Where(p => p.Class1 == null)); 
+0

謝謝它的工作 –

+0

不客氣。如果它解決了你的問題,請標記爲正確的答案。 –

1

的問題是,你的排序功能:

var assa = pq.OrderBy(z => z.Class1.Name != null).ToList(); 

如果你發現,你正在返回從功能的布爾值:

z => z.Class1.Name != null 

你需要的是迴歸日的價值ËName屬性:

z => z.Class1.Name 

它改成這樣:

var assa = pq.OrderBy(z => z.Class1.Name).ToList(); 
相關問題