我有一個模型:排序列表<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>
。
如何使用Owner
對SomeClass
進行排序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;}
. . . .
}
感謝所有的努力大家。
'Owner'是'名單'對象,而不是用'Name'屬性'Person'對象。 –
dasblinkenlight
正確@dasblinkenlight。有什麼問題嗎? –
列表中有很多'Person'對象,每個對象都有自己的'Name'如果你在'Owner'上對SomeClass進行排序,你會選擇幾個'Person'對象中的哪一個對象進行'Name'比較? – dasblinkenlight