在IEnumerable列表上执行OrderBy <t>时出现语法错误</t>

时间:2010-06-23 10:06:30

标签: c# linq asp.net-mvc-2 ienumerable sql-order-by

我收到的错误消息是:

至少有一个对象必须实现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对象进行排序我的结果记录。

请帮忙!

1 个答案:

答案 0 :(得分:2)

我认为您需要在选择First()的地方使用SingleWhere()代替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>());