我收到的错误消息是:
至少有一个对象必须实现IComparable
导致此问题的代码如下:
private static IEnumerable<Result> setOrderBy(IEnumerable<Result> value, string order)
{
if (order.Equals("ASC"))
{
//value = value.OrderBy(c => c, new SearchService.ResultComparer<Attribute>());
value = value.OrderBy<Result>(o => o.StringAttributes.Where(p => p.AttributeName == "Title"), new SearchService.ResultComparer<Attribute>());
//value = value.OrderBy(o => o.StringAttributes.Where(p => p.AttributeName == "Title"), new SearchService.ResultComparer<AttributeItem>()));
}
if (order.Equals("DESC"))
{
value = value.OrderByDescending(c => c, new SearchService.ResultComparer<Attribute>());
//value = value.OrderByDescending(o => o.StringAttributes.Where(p => p.AttributeName == "MatterName"));
}
return value;
}
一点背景: 在我的MVC2应用程序中,我在搜索控制器中执行搜索。当我将结果发送到结果视图时,我试图按字母顺序,按升序或降序排序结果。 但是,当我写出为我的结果对象设置OrderBy属性的逻辑时,我在代码下面得到了波浪形的红线(如VS2008中所示)。由于某种原因,该方法不喜欢我试图进行排序的数据模型。每个Result对象都有各种属性,其中一个属性是string类型的属性列表(因此名称为StringAttributes)我试图通过ALL中存在的一个String属性的值对IEnumerable集合中的每个Result对象进行排序我的结果记录。
请帮忙!
答案 0 :(得分:2)
我认为您需要在选择First()
的地方使用Single
或Where()
代替Attribute
。目前,您要求OrderBy使用IEnumerable<Attribute>
计算订单,而不是使用特定属性。
value = value.OrderBy<Result>(o => o.StringAttributes.Single(p => p.AttributeName == "Title"), new SearchService.ResultComparer<Attribute>());
或
value = value.OrderBy<Result>(o => o.StringAttributes.First(p => p.AttributeName == "Title"), new SearchService.ResultComparer<Attribute>());