为了账号安全,请及时绑定邮箱和手机立即绑定

使用Lambda / Linq对对象排序列表

使用Lambda / Linq对对象排序列表

C#
大话西游666 2019-10-24 14:07:06
我在字符串中有“按属性排序”的名称。我将需要使用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();      }}与其使用大量的ifs来检查字段名(sortBy),还没有一种更干净的方式来进行排序是否了解数据类型?
查看完整描述

3 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

可以这样做


list.Sort( (emp1,emp2)=>emp1.FirstName.CompareTo(emp2.FirstName) );

.NET框架将lambda转换(emp1,emp2)=>int为Comparer<Employee>.


这具有强类型输入的优势。


查看完整回答
反对 回复 2019-10-24
?
一只名叫tom的猫

TA贡献1906条经验 获得超2个赞

您可以做的一件事就是更改,Sort以便更好地利用lambda。


public enum SortDirection { Ascending, Descending }

public void Sort<TKey>(ref List<Employee> list,

                       Func<Employee, TKey> sorter, SortDirection direction)

{

  if (direction == SortDirection.Ascending)

    list = list.OrderBy(sorter);

  else

    list = list.OrderByDescending(sorter);

}

现在,您可以指定在调用Sort方法时要排序的字段。


Sort(ref employees, e => e.DOB, SortDirection.Descending);


查看完整回答
反对 回复 2019-10-24
  • 3 回答
  • 0 关注
  • 512 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信