我有一个模特:
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
属性排序时,我收到错误:
“至少有一个对象必须实现IComparable。”
我猜这是因为系统不知道如何通过List<SomeClass>
属性对Owner
进行排序。
如果使用SomeClass
对Owner.Name
进行排序,我如何允许Owner
按Compare
排序?我见过的例子覆盖了模型的Owner
逻辑,但我不知道从哪里开始。
非常感谢任何帮助。
修改
@dasblinkenlight的comment启发了我。实际上,按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;}
. . . .
}
模型:
{{1}}
感谢所有人的努力。
答案 0 :(得分:1)
对Person类进行一些更改:
public class Person : IComparable {
public string Name {get;set;}
public Guid PersonID {get;set;}
// implement the methods for IComparable
}
您可以在此链接中找到一个好的样本。
https://msdn.microsoft.com/en-us/library/system.icomparable(v=vs.110).aspx
答案 1 :(得分:0)
Person
应该实现IComparable<T>
接口。查看官方docs以获取示例。