我有一个对象列表,其中还包含对象 例如。
Class Customer{
string name;
Address addr;
}
Class Address
{
string city;
string state;
}
现在我有一个绑定(bind)到 gridview 的 Customer 对象列表。
| Name | city | State |
我想根据城市和州对 gridview 列进行排序。 我该怎么做。
我尝试过这样做
var param = Expression.Parameter(typeof(Customer), e.SortExpression);
var sortExpression = Expression.Lambda<Func<Customer, object>>(
Expression.Convert(Expression.Property(param, e.SortExpression),typeof(object)), param);
但是当排序表达式为city时,它不会排序。
最佳答案
这是我正在运行的示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
public class Program
{
public static void Main()
{
var list = new List<Customer>();
list.Add(new Customer()
{
FirstName = "ztest",
LastName = "ztest1",
Address = new Address()
{
City = "Kiev"
}
});
list.Add(new Customer()
{
FirstName = "test",
LastName = "test1",
Address = new Address()
{
City = "New York"
}
});
string sortExpressionField = "Address.City";
var props = sortExpressionField.Split('.');
var inParam = Expression.Parameter(typeof(Customer));
var param = props.Aggregate<string, Expression>(inParam, Expression.Property);
var sortExpression = Expression.Lambda<Func<Customer, object>>(param, inParam);
var sorted = list.AsQueryable<Customer>().OrderBy(sortExpression);
foreach (var item in sorted)
{
Console.WriteLine("{0} {1}", item.FirstName, item.LastName);
}
}
}
public class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public Address Address { get; set; }
}
public class Address
{
public string City { get; set; }
}
这里是验证其是否有效的链接 - http://dotnetfiddle.net/iQSTBR
更新1
对于复杂的情况,您需要解析属性,并导航到最后一个属性。我已经更新了代码,这里是使用子属性的示例 - http://dotnetfiddle.net/alTWPK
更新2
var selectedNew = selected
.AsQueryable<Customer>()
.OrderBy(sortExpression)
.ToList();
gdvEmployees.DataSource = selectedNew;
gdvEmployees.DataBind();
关于c# - 对 ASP.NET 中进一步包含对象的对象列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20772233/