【问题标题】:LINQ SortingLINQ 排序
【发布时间】:2009-01-15 10:21:13
【问题描述】:

我正在排序一个 GridView 绑定到一个任意类型。

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
    List<object> lb = (List<object>)ReturnAnony(); // Not working
    // ?? What to write here
}

object ReturnAnony()
{
    var anony = // I create the ananymous type and return    
    return anony;
}

【问题讨论】:

    标签: asp.net linq


    【解决方案1】:

    不太确定你想要什么。

    如果你要创建一个匿名类型的 List,你可以使用 currying 函数来帮助你:

    public List<T> makeAList<T>(T x)
    {
        var l = new List<T>();
    
        l.Add(x);
        return l;
    }
    

    这是你想要的吗?

    否则,您不能在其范围之外引用匿名类型,除非您创建一个 path 以将类型信息桥接到您的代码...最终您应该这样做一个新的类。

    【讨论】:

      【解决方案2】:

      你想用磅做什么?

      一般来说,匿名类型并不适合从方法中返回,因为你无法表达返回类型。

      您是否考虑过将匿名类型扩展为普通的命名类型?

      【讨论】:

        【解决方案3】:

        如果你想在 GrideView EventHandler 中访问你的数据项,你真的不应该使用匿名类型。匿名类型仅在它们定义的方法范围内可用,因此当您到达另一个范围时它才被称为对象。然后访问您需要使用反射的属性。

        但是为了进行排序,您可以让它有点疯狂,请参阅我在这个问题中所做的回复:How do I apply OrderBy on an IQueryable using a string column name within a generic extension method?

        它介绍了如何动态执行 OrderBy 语句,但您可以将这些原则应用于任何类型的 LINQ 过滤器。

        【讨论】:

          【解决方案4】:

          如果您对ASP.NET GridView 进行排序,您只需在事件参数对象的SortExpression 属性中指定要排序为字符串的字段即可。

          protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
          {
              e.SortExpression = "FieldABC";
          }
          
          object ReturnAnony()
          {
              var anony = new object { FieldABC = 123 };
              return anony;
          }
          

          这应该允许您对匿名类型的任何字段进行排序。

          您无需创建任何列表。

          【讨论】:

            【解决方案5】:

            关于您的其他问题,方法如下:

            var l = new List<Employee>();
            
            l.Sort((x, y) => (x.FirstName.CompareTo(y.FirstName)));
            

            请编辑问题或只问另一个问题。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-07-06
              • 2015-11-01
              • 2012-03-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-09-10
              相关资源
              最近更新 更多