2017-10-18 74 views
-2

我有一個模型:排序列表<T>使用其屬性的屬性

public class SomeClass { 
    public List<Person> Owner {get; set;} 
    public int Balance {get;set;} 
    . . . . 
} 

public class Person { 
    public string Name {get;set;} 
    public Guid PersonID {get;set;} 
    . . . . 
} 

我有一個包裝類處理排序:

public class SortedResult <ModelType>: Result where ModelType: new() { 

    . . . . 

    private void SetProperties(IQueryable <ModelType> data, int pageIndex, int pageSize, string orderBy, OrderDirection ? orderDir) { 
    if (!String.IsNullOrEmpty(orderBy)) { 
     // auto-handles the order-by 
     if (orderDir == OrderDirection.Descending) { 
     data = data.OrderByDescending(orderBy); 
     } else { 
     data = data.OrderBy(orderBy); 
     } 
    } 

    int total = data.Count(); 
    // no ordering 
    Data = data.Skip(pageIndex * pageSize).Take(pageSize).ToList(); 
    AllData = myIncludeAllData ? data : null; 
    PageIndex = pageIndex; 
    PageSize = pageSize; 
    TotalSize = total; 
    } 

} 

由於你可以看到,SortedResult允許我動態地排序任何List<T>。使用SomeClass運行正常等屬性進行排序,但是當我排序的Owner財產,我得到錯誤:

"At least one object must implement IComparable."

我猜測,這是因爲系統不知道如何被Owner屬性進行排序List<SomeClass>

如何使用OwnerSomeClass進行排序Owner.Name?我看過一些例子,它們覆蓋了模型的邏輯,但我不知道從哪裏開始。

任何幫助將非常感激。

編輯:

@ dasblinkenlight的comment眼前一亮。確實,排序爲Owner這是一個List<Person>是錯誤的。

對於修復,我修改了SomeClass型號:

public class SomeClass { 
    public List<Person> Owner {get; set;} 
    //should sort using this prop instead of Owner 
    public string OwnerName { get 
          { return string.Join(", ", this.Owner.Select(r => r.Name)); } 
          } 
    public int Balance {get;set;} 
    . . . . 
} 

感謝所有的努力大家。

+0

'Owner'是'名單'對象,而不是用'Name'屬性'Person'對象。 – dasblinkenlight

+0

正確@dasblinkenlight。有什麼問題嗎? –

+0

列表中有很多'Person'對象,每個對象都有自己的'Name'如果你在'Owner'上對SomeClass進行排序,你會選擇幾個'Person'對象中的哪一個對象進行'Name'比較? – dasblinkenlight

回答

0

Person應該實現IComparable<T>接口。查看官方docs的例子。