gpt4 book ai didi

c# - 对在 ASP.NET 中进一步具有对象的对象列表进行排序

转载 作者:行者123 更新时间:2023-11-30 20:52:35 25 4
gpt4 key购买 nike

我有一个对象列表,其中还有对象对于例如。

Class Customer{
string name;
Address addr;
}

Class Address
{
string city;
string state;
}

现在我有一个绑定(bind)到 gridview 的客户对象列表。

| 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com