Asp.net LINQ排序

Asp.net LINQ排序,asp.net,linq,Asp.net,Linq,我正在将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

我正在将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;
}
protectedvoid GridView1\u排序(对象发送方,GridViewSortEventArgs e)
{
List lb=(List)ReturnAnony();//不工作
//?在这里写什么
}
对象ReturnAnony()
{
var anony=//我创建同名类型并返回
返回异常;
}

不确定您想要什么

如果要创建类型为匿名类型的列表,可以使用currying函数帮助您:

public List<T> makeAList<T>(T x)
{
    var l = new List<T>();

    l.Add(x);
    return l;
}
public List makeAList(tx)
{
var l=新列表();
l、 加(x);
返回l;
}
这就是你想要的吗


否则,除非创建将类型信息桥接到代码的路径,否则无法引用其作用域之外的匿名类型。。。哪个。。。最后,你应该创建一个新类。

你想用lb做什么

一般来说,匿名类型并不真正适合从方法返回,因为您无法表示返回类型


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

如果要访问GrideView事件处理程序中的数据项,您确实不应该使用匿名类型。匿名类型仅在其定义的方法范围内可用,因此只有在您到达另一个范围时它才称为object。然后,要访问属性,需要使用refection

但是对于排序,你可以让它有一点疯狂的动态,看看我在这个问题上的回答:

它显示了如何动态执行OrderBy语句,但您可以将这些原则应用于任何类型的LINQ筛选器。

如果您正在对一个进行排序,您只需在事件args对象的属性中指定要排序为字符串的字段即可

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
    e.SortExpression = "FieldABC";
}

object ReturnAnony()
{
    var anony = new object { FieldABC = 123 };
    return anony;
}
这应该允许您对任何匿名类型的字段进行排序

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;
}

您不需要创建任何列表。

关于您的另一个问题,以下是如何:

var l = new List<Employee>();

l.Sort((x, y) => (x.FirstName.CompareTo(y.FirstName)));
var l=新列表();
l、 排序((x,y)=>(x.FirstName.CompareTo(y.FirstName));
请在中编辑该问题,或者只问另一个问题