Asp.net LINQ排序
我正在将GridView绑定排序为同名类型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
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));
请在中编辑该问题,或者只问另一个问题