相关疑难解决方法(0)

IEnumerable <T>/IQueryable <T>上的动态LINQ OrderBy

我在动态LINQ 的VS2008示例中找到了一个示例,它允许您使用类似sql的字符串(例如,OrderBy("Name, Age DESC"))用于排序.不幸的是,包含的方法仅适用于IQueryable<T>;.有没有办法获得此功能IEnumerable<T>

c# linq linq-to-objects

657
推荐指数
12
解决办法
26万
查看次数

使用Lambda/Linq对列表对列表进行排序

我在字符串中有"按属性排序"的名称.我将需要使用Lambda/Linq对对象列表进行排序.

例如:

public class Employee
{
  public string FirstName {set; get;}
  public string LastName {set; get;}
  public DateTime DOB {set; get;}
}


public void Sort(ref List<Employee> list, string sortBy, string sortDirection)
{
  //Example data:
  //sortBy = "FirstName"
  //sortDirection = "ASC" or "DESC"

  if (sortBy == "FirstName")
  {
    list = list.OrderBy(x => x.FirstName).toList();    
  }

}
Run Code Online (Sandbox Code Playgroud)
  1. 而不是使用一堆ifs来检查fieldname(sortBy),是否有更简洁的方法进行排序
  2. 排序是否知道数据类型?

c# linq lambda linq-to-objects

264
推荐指数
9
解决办法
47万
查看次数

如何改进此排序代码?

我正在检查sort参数并构建一堆if语句:

if (sortDirection == "ASC")
{
    if (sortBy == "Id")
        return customerList.OrderBy(x => x.Id).Skip(startIndex).Take(pageSize).ToList();
    if (sortBy == "FirstName")
        return customerList.OrderBy(x => x.FirstName).Skip(startIndex).Take(pageSize).ToList();
    if (sortBy == "City")
        return customerList.OrderBy(x => x.City).Skip(startIndex).Take(pageSize).ToList();
}
else
{
    if (sortBy == "Id")
        return customerList.OrderByDescending(x => x.Id).Skip(startIndex).Take(pageSize).ToList();
    if (sortBy == "FirstName")
        return customerList.OrderByDescending(x => x.FirstName).Skip(startIndex).Take(pageSize).ToList();
    if (sortBy == "City")
        return customerList.OrderByDescending(x => x.City).Skip(startIndex).Take(pageSize).ToList();
}
Run Code Online (Sandbox Code Playgroud)

我该如何做得更好?

.net c# linq

6
推荐指数
1
解决办法
219
查看次数

标签 统计

c# ×3

linq ×3

linq-to-objects ×2

.net ×1

lambda ×1