【问题标题】:List OrderBy Issue列出按问题排序
【发布时间】:2011-07-15 13:57:57
【问题描述】:

我正在尝试自己处理 gridview 排序。这个我想不通:

protected void gvPackages_Sorting(object sender, GridViewSortEventArgs e)
    {
    List<Package> pck = new List<Package>();
    pck = Session["Packages"] as List<Package>;

    var output = (from p in pck
                  orderby p.Department
                  select p);        <-line that breaks
    // var output = pck.OrderBy(x => x.Department).ToList(); <- I've also tried this
    gvPackages.DataSource = output;
    gvPackages.DataBind();
    }

我得到的错误是:

至少一个对象必须实现 IComparable。

包裹是一个实体,所以我不明白我缺少什么。我在网上找到的其他例子反映了我上面的内容,以及它的各种迭代。我错过了什么? 顺便说一句,Department 只是一个作为测试让它发挥作用的领域,它在最终版本中会更加动态。

编辑:再次感谢堆栈,我是个大傻瓜。

【问题讨论】:

  • p,Department 是什么类型?另外,您为什么要新建一个列表,然后从您的会话中获取一个?

标签: c# asp.net linq entity-framework-4 sql-order-by


【解决方案1】:

问题是您尝试按部门订购,但部门类型不知道应该如何订购,因为您还没有实现需要指定顺序的方法的 IComparable,例如Orderby Dept.Name or Dept.Location, Dept.Size,谁知道呢?

【讨论】:

  • 是的,就是部门名称!
【解决方案2】:

无论Department 的类型是什么,它都不会实现IComparable。它可能是一个对象/实体/DataRow 类型。

您要按 ID、名称、.. 排序吗?

【讨论】:

  • 部门也是一个实体。但我想我正在寻找它。
  • 是的,您不能按实体订购。不过,您可以按值排序,例如该实体的 ID 或该实体的名称。所以orderby p.Department.SomePropertyHere :)
  • 我被我的测试用例搞砸了。我找错地方了……谢谢!
猜你喜欢
  • 2014-10-12
  • 1970-01-01
  • 2010-11-01
  • 2010-09-16
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多