C# List的使用
正文
一、List排序
采用自定义Sort比较器和Linq

class Persion { public string name; public int age; } //自定义Sort方法 private static void sortListClass() { Persion p1 = new Persion() { name = "huyong", age = 27 }; Persion p2 = new Persion() { name = "tansha", age = 25 }; List<Persion> listPersion = new List<Persion>(); listPersion.Add(p1); listPersion.Add(p2); listPersion.Sort(sortage); foreach (var item in listPersion) { Console.WriteLine(item.name + ":" + item.age); } } static int sortage(Persion x, Persion y) { if (x.age < y.age) return -1; //按age从大到小 降序排列 else if (x.age == y.age) return 0; else return 1; } //linq方法 private static void sortLinq() { Persion p1 = new Persion() { name = "huyong", age = 27 }; Persion p2 = new Persion() { name = "tansha", age = 25 }; Persion p3 = new Persion() { name = "tansha", age = 27 }; List<Persion> listPersion = new List<Persion>(); listPersion.Add(p1); listPersion.Add(p2); listPersion.Add(p3); var lList = from t in listPersion where (t.age == 27) orderby t.name ascending select t; foreach (var item in lList) { Console.WriteLine(item.name + ":" + item.age); } } //或者 listPersion =listPersion.OrderBy(p=>p.name).ToList();
采用Linq的OderBy排序时,
若集合的个数为0,也不会报错;
OderBy排序的结果需要重新赋值给list集合。
二、用Linq将两个Model的list合并为一个list
1、两个Model的属性不相同

//linq合并两个list,根据某一相同字段 private static void mergeList() { Persion p1 = new Persion() { name = "hy", province = "jx" }; Persion p2 = new Persion() { name = "tansha", province = "hn" }; Persion p3 = new Persion() { name = "ht", province = "gd" }; List<Persion> listPersion = new List<Persion>(); listPersion.Add(p1); listPersion.Add(p2); listPersion.Add(p3); Persion p11 = new Persion() { name = "hy", age = 23, sex = "男" }; Persion p21 = new Persion() { name = "tansha", age = 12, sex = "女" }; Persion p31 = new Persion() { name = "ht", age = 7, sex = "男" }; List<Persion> listPersion2 = new List<Persion>(); listPersion2.Add(p11); listPersion2.Add(p21); listPersion2.Add(p31); //linq合并两个list,根据某一相同字段 var list = from pp1 in listPersion join pp2 in listPersion2 on pp1.name equals pp2.name select new Persion { name = pp1.name, province = pp1.province, age = pp2.age, sex = pp2.sex }; foreach (var item in list) { Console.WriteLine(item.name + ":" + item.age + ":" + item.sex + ":" + item.province); } }
2、两个对象model 之间取差集、交集、并集

public class TerminalModel { public string Code{get;set;} public string Name{get;set;} } public class CompareTerminalModel : IEqualityComparer<TerminalModel> { public bool Equals(TerminalModel x, TerminalModel y) { return x.Code == y.Code; } public int GetHashCode(TerminalModel p) { if (p == null) return 0; return p.Code.GetHashCode(); } } 3. 取集 List<TerminalModel> list = new List<TerminalModel>(); List<TerminalModel> list2 = new List<TerminalModel>(); var chaji = list.Except(list2,new CompareTerminalModel()).ToList(); //差集 var jiaoJi = list.Intersect(list2,new CompareTerminalModel()).ToList(); //交集 var bingJi = list.Union(list2,new CompareTerminalModel()).ToList(); //并集
其中,并集Union,若结果中想用某个list的字段,则其list写在Union的前面
三、对List里面的某个数据进行操作并保存
lists.Where(q =>q.SellChannelId == ((int)SellChannelType.PB).ToString()).ToList().ForEach(q => q.index = 10);
四、List<T>转化为IQueryable<T>
不能直接转换,
IQueryable在数据库端中查询,
IEnumerable在内存上查询。
List<T>支持后者。可以用 list.AsQueryable<T>转换。
五、使用LINQ从List<T>集合中删除指定集合元素
实体类(Author):
public class Author{ public int id{get;set;} public string firstname{get;set;} public string lastname {get;set;} }
比如有如下的LINQ查询语句:
var authors = from x in authorsList
select x;
其中,需要从查询集合中删除 firstname=’Bob’ 的所有用户,应该如何实现呢?
方案一:
authorsList = authorsList.Where(x => x.FirstName != "Bob").ToList(); //或者 authorsList.RemoveAll(x => x.firstname == "Bob");
方案二:
var authorsList = new List<Author>() { new Author{ Firstname = "Bob", Lastname = "Smith" }, new Author{ Firstname = "Fred", Lastname = "Jones" }, new Author{ Firstname = "Brian", Lastname = "Brains" }, new Author{ Firstname = "Billy", Lastname = "TheKid" } }; var authors = authorsList.Where(a => a.Firstname == "Bob"); authorsList = authorsList.Except(authors).ToList(); authorsList = authorsList.Except(authorsList.Where(a=>a.Firstname=="Billy")).ToList();
六、快速创建一个连续数字的List
var numberList = Enumerable.Range(1, 100).ToList();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~