C# 常用linq、lambda表达式整理(持续更新中~~)
这里介绍的是个人.net开发中使用到的一些linq和lambda表达式(java在jdk1.8中添加了lambda表达式),今天整理了一下,希望能够帮助到大家^_^
1.在List中查询某元素,并返回另一个List
List<string> listLoadMouldNo = listAllLoad.Select(m => m.MouldNo).ToList(); //查询出了listAllLoad中MouldNo元素,并放入另一个List.
2.筛选出List中符合条件的,放入另一个List
List<DMDXSeg> lstSeg = listAllDMDX.Where(m => m.SegCode == 1012).ToList();
3.找出List中某元素值包含于另一个List中的,放入另一个List
List<DMDXSeg> list = listAllInv.Where(m => listAllMould.Contains(m.MouldNo)).ToList(); //找出listAllInv中MouldNo在listAllMould中存在的部分
4.去重,以List中某元素为基准,去除次元素相同的记录
List<MouldDMDXInfo> listBM_Distinct = listAllMouldBM.Where((m, i) => listAllMouldBM.FindIndex(z => z.MouldNo == m.MouldNo) == i).ToList(); //去除MouldNo相同的记录
5.以List中某元素为查询条件,判断List中是否存在数据
list.Exists(x => x.NGTYPE == 1); //判断List是否存在NGTYPE为1的元素
6.DataTable中使用Select()方法找出interval最大的那条数据
DataRow[] oTmp = dt.Select("interval = max(interval)");
DataTable中Select()方法筛选不等于某条件的数据(使用"<>",不能使用“!=”,会报错)
DataRow[] drs = dt.Select(string.Format(" type<> '{0}' ","2"));
7.以某字段为查询条件,查询DataTable中符合条件的数据
DataRow[] drs = dt.AsEnumerable().Where<DataRow>(m => m["name"].Equals("小明")).ToArray(); //找出DataTable中name为小明的数据
8.查询DataRow[]中某列的值,取DataRow中第一个值
var unloadtime = drs.AsEnumerable().Select(t => t.Field<string>("unloadtime")).FirstOrDefault().ToString();
9.数组中以多个字段分组,再以某字段升序排序,再取第一个(以MODEL,PATTERN分组,再以ACCEPTTIME升序排序)
var arrFlowData = arrMESFlowData.AsEnumerable().GroupBy(t => new { t.MODEL, t.PATTERN }).Select(t => t.OrderBy(x => x.ACCEPTTIME).FirstOrDefault());
10.List中以Hours降序,再以DssCode升序排序(先按Hours降序,如果Hours相同再按DssCode升序。如果Hours为null或者为空,排序会出现混乱,待解决 O(≧口≦)O)
List<DMDXMould> list = dmdxDetail.listMouldLoad.OrderByDescending(t => t.Hours).ThenBy(t => t.DssCode).ToList();
11.从DataTable中取出某列的值并返回一个List<int>集合
var list =dt.AsEnumerable().Select<DataRow, int>(x => Convert.ToInt32(x["列名"])).ToList<int>();
12.DataTable使用Where筛选并排序(根据no和code筛选,再根据date和time降序排序)
DataRow[] drs = dt.AsEnumerable().Where<DataRow>(t => t["no"].Equals("FU123456") && t["code"].Equals("LFMJ03")).OrderByDescending(t => t["date"]).ThenByDescending(t => t["time"]).ToArray();
13.lambda表达式在分组求和
var newlist = data.GroupBy(x => x.Id).Select(m => new {Qty = m.Sum(q => q.Qty)});
14.lambda表达式多表关联查询
var userdto = users.Join(Phones,m => m.Id,n => n.UserId,(m,n) => new UserDto { Name = m.Name, Gender = m.Gender, PhoneNumber = n.PhoneNumber });
未完待续~~
浮躁的人容易问:我到底该学什么;----别问,学就对了; 浮躁的人容易问:JS有钱途吗;----建议你去抢银行; 浮躁的人容易说:我要中文版!我英文不行!----不行?学呀! 浮躁的人分两种:只观望而不学的人;只学而不坚持的人; 浮躁的人永远不是一个高手。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通