gpt4 book ai didi

c#-4.0 - 为 Web API Controller 创建列表排序

转载 作者:行者123 更新时间:2023-12-01 08:01:10 25 4
gpt4 key购买 nike

我正在编写我的第一个 Web API Controller ,所以我在这方面有点菜鸟。我正在尝试通过名为 CustomerDataSource 的静态类检索数据列表:

public static class CustomerDataSource
{
public static List<Customer> customerData
{
get
{
Customer customer1 = new Customer() { name = "Bert", address = "London" };
Customer customer2 = new Customer() { name = "Jon", address = "New York" };
List<Customer> listCustomers = new List<Customer>();
listCustomers.Add(customer1);
listCustomers.Add(customer2);
return listCustomers;
}
}
}

public class Customer
{
public string name { get; set; }
public string address { get; set; }
}

我的 ApiController 有点卡住了,因为我试图按“名称”或“地址”对列表进行排序,但使用名为“字段”的字符串无法编译。对于提供对 Customer 属性之一进行排序的 WebAPI Controller GETmethod 的良好实现是什么?
public class ValuesController : ApiController
{
// GET api/values
public List<Customer> Get(string field)
{
var list = CustomerDataSource.customerData.OrderBy(field);
}
}

最佳答案

创建一个如下所示的扩展方法,然后您可以在项目的同一命名空间内的任何位置使用它。

public static class extensionmethods
{
public static IQueryable<T> OrderByPropertyName<T>(this IQueryable<T> q, string SortField, bool Ascending)
{
var param = Expression.Parameter(typeof(T), "p");
var prop = Expression.Property(param, SortField);
var exp = Expression.Lambda(prop, param);
string method = Ascending ? "OrderBy" : "OrderByDescending";
Type[] types = new Type[] { q.ElementType, exp.Body.Type };
var rs = Expression.Call(typeof(Queryable), method, types, q.Expression, exp);
return q.Provider.CreateQuery<T>(rs);
}
}

然后你可以像这样使用它:
 public List<Customer> Get(string PropertyName)
{
var list = CustomerDataSource.customerData.AsQueryable().OrderByPropertyName("PropertyName",true).ToList();
}

笔记:
因为扩展方法使用 IQueryable 并返回 IQuerybale,所以您需要将您的 List 转换为 IQueryable。您也可以按升序和降序对列表进行排序,只需将 bool 类型值传递给第二个参数。默认为升序。

关于c#-4.0 - 为 Web API Controller 创建列表排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21176782/

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