按字符串参数对C#对象的列表进行排序
我有一个按字符串参数对C#对象的列表进行排序,c#,sorting,ienumerable,C#,Sorting,Ienumerable,我有一个ListUser类对象的列表。我需要能够使用文本表达式以升序或降序传递该列的字符串值和顺序。我所看到的所有使用Lambda表达式的对象属性都是强类型值,如何通过添加“firstname descending”作为参数来实现这一点 代码如下 namespace SortLists { class ListUser { public int id { get; set; } public string firstname { get; set; } publ
ListUser
类对象的列表。我需要能够使用文本表达式以升序或降序传递该列的字符串值和顺序。我所看到的所有使用Lambda表达式的对象属性都是强类型值,如何通过添加“firstname descending”作为参数来实现这一点
代码如下
namespace SortLists
{
class ListUser
{
public int id { get; set; }
public string firstname { get; set; }
public string lastname { get; set; }
public string company { get; set; }
public string phonenumber { get; set; }
}
class Program
{
static void Main(string[] args)
{
var user1 = new ListUser() { id = 1, firstname = "James", lastname = "Smith", company = "Code Logic", phonenumber = "01235 566 456" };
var user2 = new ListUser() { id = 1, firstname = "Chris", lastname = "Andrews", company = "Adobe", phonenumber = "01235 566 456" };
var user3 = new ListUser() { id = 1, firstname = "Paul", lastname = "Jones", company = "Microsoft", phonenumber = "01235 566 456" };
var user4 = new ListUser() { id = 1, firstname = "Peter", lastname = "Williams", company = "Apple", phonenumber = "01235 566 456" };
List<ListUser> users = new List<ListUser>()
{
user1, user2, user3, user4
};
}
}
名称空间排序列表
{
类列表用户
{
公共int id{get;set;}
公共字符串名{get;set;}
公共字符串lastname{get;set;}
公共字符串公司{get;set;}
公共字符串phonenumber{get;set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
var user1=new ListUser(){id=1,firstname=“James”,lastname=“Smith”,company=“Code Logic”,phonenumber=“01235 566 456”};
var user2=new ListUser(){id=1,firstname=“Chris”,lastname=“Andrews”,company=“Adobe”,phonenumber=“01235 566 456”};
var user3=new ListUser(){id=1,firstname=“Paul”,lastname=“Jones”,company=“Microsoft”,phonenumber=“01235 566 456”};
var user4=new ListUser(){id=1,firstname=“Peter”,lastname=“Williams”,company=“Apple”,phonenumber=“01235 566 456”};
列表用户=新列表()
{
用户1,用户2,用户3,用户4
};
}
}
添加对nuget软件包的引用:
var usersSorted=users.AsQueryable().OrderBy(“firstname ASC”).ToList();
添加对nuget软件包的引用:
var usersSorted=users.AsQueryable().OrderBy(“firstname ASC”).ToList();
只需按如下方式构造排序方法:
if(stringPassed == "firstname")
{
List<ListUser> sortedListUser = listUser.OrderBy(p=>p.firstName).ToList();
}
else if(...) // and so on
然后将输入字符串与类中的属性进行循环,得到所需的字符串并对其进行排序。这是给老师留下深刻印象的一种奇特方式。只需按如下方式构造排序方法:
if(stringPassed == "firstname")
{
List<ListUser> sortedListUser = listUser.OrderBy(p=>p.firstName).ToList();
}
else if(...) // and so on
然后将输入字符串与类中的属性进行循环,得到所需的字符串并对其进行排序。这是给老师留下深刻印象的一种奇特方式。使用字典很容易。只需从以下内容开始:
var sortBy = new Dictionary<string, Func<IEnumerable<ListUser>, IEnumerable<ListUser>>>()
{
{ "firstname", lus => lus.OrderBy(lu => lu.firstname) },
{ "lastname", lus => lus.OrderBy(lu => lu.lastname) },
{ "company", lus => lus.OrderBy(lu => lu.company) },
{ "phonenumber", lus => lus.OrderBy(lu => lu.phonenumber) },
};
var sortBy=newdictionary()
{
{“firstname”,lus=>lus.OrderBy(lu=>lu.firstname)},
{“lastname”,lus=>lus.OrderBy(lu=>lu.lastname)},
{“company”,lus=>lus.OrderBy(lu=>lu.company)},
{“phonenumber”,lus=>lus.OrderBy(lu=>lu.phonenumber)},
};
然后您可以很容易地按如下方式进行排序:
List<ListUser> sorted = sortBy["firstname"](users).ToList();
List sorted=sortBy[“firstname”](users.ToList();
如果您想让它下降,只需执行以下操作:
List<ListUser> sorted = sortBy["firstname"](users).Reverse().ToList();
List sorted=sortBy[“firstname”](用户).Reverse().ToList();
使用字典很容易。只需从以下内容开始:
var sortBy = new Dictionary<string, Func<IEnumerable<ListUser>, IEnumerable<ListUser>>>()
{
{ "firstname", lus => lus.OrderBy(lu => lu.firstname) },
{ "lastname", lus => lus.OrderBy(lu => lu.lastname) },
{ "company", lus => lus.OrderBy(lu => lu.company) },
{ "phonenumber", lus => lus.OrderBy(lu => lu.phonenumber) },
};
var sortBy=newdictionary()
{
{“firstname”,lus=>lus.OrderBy(lu=>lu.firstname)},
{“lastname”,lus=>lus.OrderBy(lu=>lu.lastname)},
{“company”,lus=>lus.OrderBy(lu=>lu.company)},
{“phonenumber”,lus=>lus.OrderBy(lu=>lu.phonenumber)},
};
然后您可以很容易地按如下方式进行排序:
List<ListUser> sorted = sortBy["firstname"](users).ToList();
List sorted=sortBy[“firstname”](users.ToList();
如果您想让它下降,只需执行以下操作:
List<ListUser> sorted = sortBy["firstname"](users).Reverse().ToList();
List sorted=sortBy[“firstname”](用户).Reverse().ToList();
您可以使用if-else结构。您可以使用if-else结构。对于efcore:For-efcore: