高效的LINQ语句(二)

C# LINQ 在数据处理中的高效应用 摘要: LINQ(Language Integrated Query)是C#中强大的数据查询技术,它简化了集合数据的操作方式,可提升代码可读性和开发效率。然而,在大规模数据处理时,需注意性能优化,如区分延迟执行与即时执行、选择合适的LINQ方法以减少计算开销,并通过索引或字典优化查找效率。此外,避免不必要的内存分配、合理使用并行LINQ(PLINQ)以及合并查询条件,均可提升性能。本文探讨了LINQ的高效应用策略,帮助开发者在简化代码的同时兼顾性能优化。 阅读详情

Program.cs代码如下:

 class Program
    {
        private static void Main(string[] args)
        {
            //Sum_All_Scores_Remove_Three_Lowest();
            //Grouping();
            //Group_By_Age_From_Birthdate();
            Title_Of_Longest_Book();
            Console.ReadKey();
        }

         
        public static void Sum_All_Scores_Remove_Three_Lowest()
        {
            var scores = "10,5,0,8,10,1,4,0,10,1";
            var desiredScoreSum = scores
                .Split(',')
                .Select(s => int.Parse(s))
                .OrderBy(s => s)
                .Skip(3)
                .Sum();
            Console.WriteLine(desiredScoreSum);
        }

        public static void Grouping()
        {
            var orders = new List<Order>()
            {
                new Order {Id = 123, Amount = 29.95m, CustomerId = "Mark", Status = "Delivered"},
                new Order {Id = 456, Amount = 45.00m, CustomerId = "Steph", Status = "Refunded"},
                new Order {Id = 768, Amount = 32.50m, CustomerId = "Claire", Status = "Delivered"},
                new Order {Id = 222, Amount = 300.00m, CustomerId = "Mark", Status = "Delivered"},
                new Order {Id = 333, Amount = 465.00m, CustomerId = "Steph", Status = "Awaiting Stock"},
                new Order {Id = 333, Amount = 465.00m, CustomerId = "Steph", Status = "Awaiting Stock"},
            };

            Dictionary<string, List<Order>> ordersByCustomer = OrdersByCustomer(orders);
            foreach (var kvp in ordersByCustomer)
            {
                Console.WriteLine("Key: {0}, Value: {1}", kvp.Key, kvp.Value.Count);
            }

            //
            Dictionary<string, List<Order>> ordersByCustomer2 = orders.GroupBy(o => o.CustomerId).ToDictionary(g => g.Key, g => g.ToList());
            foreach (var kvp in ordersByCustomer2)
            {
                Console.WriteLine("Key: {0}, Value: {1}", kvp.Key, kvp.Value.Count);
            }

        }
        private static Dictionary<string, List<Order>> OrdersByCustomer(List<Order> orders)
        {
            var dict = new Dictionary<string, List<Order>>();
            foreach (var order in orders)
            {
                if (!dict.ContainsKey(order.CustomerId))
                {
                    dict[order.CustomerId] = new List<Order>();
                }
                dict[order.CustomerId].Add(order);
            }
            return dict;
        }

        public static void Group_By_Age_From_Birthdate()
        {
            string namesAndAges = "Phillip Do, 10/10/1978; Mony Taing, 11/10/1979; Mason Do, 03/23/2009; Emma Do, 11/09/2010";
            var result = namesAndAges
                .Split(';')
                .Select(n => n.Split(','))
                .Select(
                    n =>
                        new
                        {
                            Name = n[0].Trim(),
                            DateOfBirth = DateTime.ParseExact(n[1].Trim(), "M/d/yyyy", CultureInfo.InvariantCulture)
                        })
                .OrderByDescending(n => n.DateOfBirth)
                .Select(n =>
                {
                    DateTime today = DateTime.Today;
                    int age = today.Year - n.DateOfBirth.Year;
                    if (n.DateOfBirth > today.AddYears(-age))
                    {
                        age--;
                    }
                    return new { Name = n.Name, Age = age };
                });

            foreach (var item in result)
	        {
                Console.WriteLine(item.Name + "----" + item.Age);
	        }
           
        }

        //---------------------------------------------------------------------------------------------------
        public static void Group_By_Age_From_Birthdate_Clean()
        {
            Func<string, DateTime> parseDob =
                dob => DateTime.ParseExact(dob.Trim(), "M/d/yyyy", CultureInfo.InvariantCulture);
            Func<DateTime, int> getAge = dateOfBirth =>
            {
                DateTime today = DateTime.Today;
                int age = today.Year - dateOfBirth.Year;
                if (dateOfBirth > today.AddYears(-age)) age--;
                return age;
            };

            string namesAndAges =
                "Phillip Do, 10/10/1978; Mony Taing, 11/10/1979; Mason Do, 03/23/2009; Emma Do, 11/09/2010";
            var result = namesAndAges
                .Split(';')
                .Select(n => n.Split(','))
                .Select(n => new { Name = n[0].Trim(), DateOfBirth = parseDob(n[1].Trim()) })
                .OrderByDescending(n => n.DateOfBirth)
                .Select(n => new { Name = n.Name, Age = getAge(n.DateOfBirth) });
        }

        private DateTime ParseDob(string dob)
        {
            return DateTime.ParseExact(dob.Trim(), "M/d/yyyy", CultureInfo.InvariantCulture);
        }

        private int GetAge(DateTime dateOfBirth)
        {
            DateTime today = DateTime.Today;
            int age = today.Year - dateOfBirth.Year;
            if (dateOfBirth > today.AddYears(-age))
            {
                age--;
            }
            return age;
        }
        //---------------------------------------------------------------------------------------------------
        public static void Title_Of_Longest_Book()
        {
            var books = new[]
            {
                new {Author = "Robert Martin", Title = "Clean Code", Pages = 464},
                new {Author = "Oliver Sturm", Title = "Functional Programming in C#", Pages = 270},
                new {Author = "Martin Fowler", Title = "Patterns of Enterprise Application Architecture", Pages = 533},
                new {Author = "Bill Wagner", Title = "Effective C#", Pages = 328}
            };

            var mostPages = books.Max(x => x.Pages);
            var result1 = books.First(b => b.Pages == mostPages);
            var result2 = books.OrderByDescending(b => b.Pages).First();

            // 最好性能
            var result3 = books.Aggregate((agg, next) => next.Pages > agg.Pages ? next : agg);
            Console.WriteLine(result3.Title);
        }
    
    
    }

Model层:

 public class Entities
    {
        public string Name { get; set; }
        public List<string> Pets { get; set; }
    }

    public class Order
    {
        public int Id { get; set; }
        public decimal Amount { get; set; }
        public string CustomerId { get; set; }
        public string Status { get; set; }
    }



程序员的日常利器:高效使用 LINQ 提高代码质量 LINQ 是 C# 中一项强大的功能,它使得数据查询变得简单、清晰和高效。然而,要高效地使用 LINQ,我们需要掌握一些最佳实践和性能优化技巧。通过合理使用。 阅读详情

相关推荐

C# 与 LINQ:数据查询与处理的高效实践

LINQ 是 C# 中一项非常强大的特性,它让开发者能够以一种简洁、声明式的方式进行数据查询和处理。通过 LINQ,开发者不仅能够减少冗长的代码,还能够提高数据处理的效率和可读性。本文介绍了 LINQ 的基本概念与常用操作,并通过不同的数据结构展示了 LINQ 的实际应用场景。掌握 LINQ 的使用,将大大提升数据处理的效率和代码的简洁性,是每个 C# 开发者必须掌握的重要技能之一。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1241

c#进阶高级语法之LINQ

LINQ是.NET Core中提供的简化数据查询的技术。使用该技术可以用几行代码就实现复杂的数据查询。

xll的博客 2145

C# LINQ(一)概况

在LINQ前,先回顾下集合:集合基于ICollection、IList、IDictionary、IEnuerable接口及其泛型版本,例如IEnuerable&lt;T&gt;,IList和IDictionary均从ICollection接口派生,而ICollection接口又从IEnumerable接口派生。而泛型版本IEnumerable&lt;T&gt;也派生自IEnumerable,相当于...

bakalr的专栏 6745

C# | Linq基本功 —— 必学的必熟的10个方法

Linq(Language Integrated Query)是C#语言中的一种查询语言,它提供了一种统一的方式来查询和操作各种数据源,如集合、数据库、XML等。Linq的出现使得开发者能够以一种更简洁、更直观的方式来处理数据,提高了代码的可读性和可维护性。本文介绍了C# Linq中一些作为基本的扩展方法的使用。掌握这些方法可以帮助开发者更加高效地处理数据。不夸张的说作为一个.NET工程师,不熟练掌握Linq的使用便是不合格。

猿长大人 4060

高效SQL语句

高效SQL语句测试使用没什么用不要浪费时间

python自动交易 缠论_缠论自动交易系统实现了

一、缘起:缠中说禅的伟大,我想你只要上网搜索一下就知道了,他的才气不用我说,我只想说说他的《教你炒股票》系列文章,108篇文章,将他的股票操盘秘籍全部公开给广大的股友了,更有缠友将其理论写成公式,在网上也是广为流传,深受广大缠友们的喜爱。我也是缠中说禅的忠实崇拜者之一,从2008年开始每天都使用缠论来看盘,特别想将缠论写成交易系统,让计算加来帮助我们自动交易,从而减轻我们盯盘的辛劳,可是苦于没有好...

weixin_39970689的博客 4634

高效的LINQ语句(三)

Model层的类如下: public class Order { public int Id { get; set; } public decimal Amount { get; set; } public string CustomerName { get; set; } public string Status {

极客神殿 1万+

通达信主力检测利器

主力轨迹:100*EMA(EMA(MTM,N1),N1)/EMA(EMA(ABS(MTM),N1),N1),COLORWHITE;主力拉高:IF(VAR51<REF(VAR51,1),VAR51,0),COLORYELLOW,NODRAW;洗盘:IF(VAR5<REF(VAR5,1),VAR5,0),COLOR000079,NODRAW;主力进场:IF(VAR5>REF(VAR5,1),VAR5,0),COLORRED,NODRAW;MAZL:MA(主力轨迹,N2),COLORYELLOW;

zhibiaogong的博客 7451

如何提高Linq查询的性能(上)

如何提高Linq查询的性能(上)        自从Linq提出了之后,让很多的开发人员一阵的狂喜,编写代码似乎比以前更别的方便了,特别是随着Linq2Sql等推出来之后,开发人员感到了似乎手中有了强大的武器。同时,Linq2Sql带来的问题不断的出现,特别实在性能上面,这是让很多的多性能有着高要求的应用要放弃Linq2Sql系列技术的原因,并且很多回到了以前的ADO.NET技术,追求完全的控制...

weixin_33834075的博客 693

eMMC FFU固件更新实战:从协议解析到设备修复

本文详细解析eMMC FFU固件更新技术,从协议原理到实战操作,涵盖EXT_CSD寄存器操作、命令流状态机解析及专业工具使用指南。通过真实维修案例,展示如何利用FFU机制修复设备故障,并提供高级优化技巧与安全注意事项,是硬件工程师和维修技术人员的实用参考。

weixin_29191761的博客 377

局部路径规划算法 - B样条曲线(B-spline Curves)

本文详解了B样条以及代码实现

BigDavid123的博客 6506

高效的LINQ语句(一)

Program.cs代码如下: class Program { private static void Main(string[] args) { //SelectMany(); //Select_SelectMany_Difference(); //Aggregate();

极客神殿 2146

ADS软件操作(10)——DAC控件使用

该控件可以用于为元件定义随频率变换的参数,如放大器的最佳负载阻抗或者源阻抗,需要双频匹配时的优化等,下图是ADS中该控件的模型。

Zhuanzhuyan的博客 4383

C#的linq语句

 /查询表达式必须以form子句开头,以select或者group子句结束,在这两个子句之间,可以使用         ///where 、orderby、join、let和其他的from子句 本章要点 用列表在对象上执行传统查询 扩展方法 LINQ查询操作符 平行LNQ 表达式树 本章源代码下载地址( wrox. com ) ...

火麒马 3784

自动化Google Chrome的强大工具:chromedriver下载、安装、简单使用

本文介绍了 ChromeDriver 的基本概念和安装配置方法,重点讲解了如何通过 Selenium 实现 Chrome 浏览器的自动化测试。内容涵盖了 ChromeDriver 下载、版本匹配、依赖引入和简单的自动化测试脚本示例,帮助读者快速上手并避免常见问题。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 88万+

高云FPGA系列教程(2):FPGA点灯工程创建、程序下载和固化

相比于国外FPGA厂商EDA开发环境,几个G到几十个G的大小,高云云源软件安装包也很小巧,界面也很简洁,综合速度非常快,是我没想到的,好像在使用单片机一样,点一下就编译完成了,以本文简单的LED示例工程为例,比特流文件几乎在几秒钟内生成;无论是下载比特流文件到RAM还是Flash中,速度都很快,而且只有一种fs程序文件格式,不用再进行bit/mcs转换;云源软件自带的编辑器也很好用,和Notepad++界面差不多,而且快捷键很方便,具有基本的自动补全功能。

whik1194的博客 5460

LINQ查询语句

本文讨论的是使用C#,VB.NET及其他.NET语言下使用LINQ进行查询的方法,文中所给的代码都是C#。 LINQ是在.NET Framework3.5以后才引入的一种快速查询语句。在Linux系统中使用Mono2.0也支持LINQ语句。

duanhy的专栏 1791

一种白平衡增益计算中白点权重计算简易实现方式

一种白平衡白点距离权重简易实现方式

大熊 384

C#之linq语句与Debug调试

/ 实现 Batch 分块操作符// 实现 Batch 分块操作符 public static IEnumerable < IEnumerable < T > > Batch < T >(this IEnumerable < T > source , int batchSize) {i ++) {} } } // 使用示例 public static void CustomOperatorDemo() {} /* 输出:*/ }

Major_S的博客 1335

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C#进阶之LINQ(2)Linq查询语句与查询方法

(一)Linq基础 1)Linq解决的问题 面向对象编程语言与数据访问方法长期分离,以嵌入式的方式开发,例如: 编程语言中的数据类型与数据库中的数据类型形成两套体系,如:C#中的字符串string 在SQL中使用NVarchar/ Varchar/ Char来表示; SQL和XML都有各自的查询语言,而对象没有自己的查询语言,如要从List<>集合或者数组中找到符合要求的元素,非常...

forever_008的博客 9810

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【C#】System.Linq,万能的查询语句

首先是官方文档: https://docs.microsoft.com/zh-cn/dotnet/api/system.linq?view=netframework-4.7.2https://docs.microsoft.com/zh-cn/dotnet/api/system.linq.enumerable?view=netframework-4.7.2 合理的使用System.Linq类库...

萧然 1万+

C#进阶-LINQ表达式总结

本篇文章是LINQ的使用教程,用LINQ模仿对应SQL语句的执行效果。LINQ是一款很常用的扩展包,支持C#和Java,在系统进行查询数据的动作时,相较于执行数据库层面的SQL语句,后端层面的LINQ运行起来会更加高效稳定,可以极大缩短每次与数据库交互的时间,增加系统功能的稳定性,提高查询效率。

踏雨歌青春,诗酒趁年华 4842

C#之Linq语句

Linq是一种查询语句,C#中可以用这种语句做集合和数据库查询。 新建一个Student类: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { ...

温大侠的博客 2201

LINQ详解

LINQ (Language Integrated Query) 是微软在 .NET Framework 3.5 中引入的一种功能,它允许开发人员使用类似于SQL的语法来查询内存中的数据集合。LINQ 不仅限于查询数据库,还可以用来查询任何数据源,包括 XML 文档、ADO.NET 数据集、对象集合等。LINQ 的主要优点在于其简洁的语法和与 C# 的深度集成,使得数据查询更加直观和高效。

敲厉害的燕宝的博客 4081

[转]LINQ体验(4)——LINQ简介和LINQ语句之Where

查询表达式(LINQ)简介在上两篇我介绍了C#3.0新语特性和改进,这些新特性在我们编写程序时为我们提供了非常大的帮助。从这篇开始,我们开始一起来探讨LINQ。LINQ是Language Integrated Query的简称,它是集成在.NET编程语言中的一种特性。已成为编程语言的一个组成部分,在编写程序时可以得到很好的编译时语法检查,丰富的元数据,智能感知、静态类型等强类型语言的好

菩提树下的杨过 1154

LINQ 全解析:让你的C#代码更优雅高效

LINQ是.NET中强大的语言集成查询工具,支持统一语法查询多种数据源。它具有两种语法风格(查询语法和方法语法),支持筛选、投影、排序等常见操作,并具有延迟执行特性。LINQ可与EF Core结合进行数据库查询,还提供SelectMany、Join等高级功能。使用中需注意常见误区(如延迟执行问题)和优化建议(避免多次枚举)。文章详细介绍了15种常用LINQ操作,包括Where、Count、GroupBy等,并推荐LINQPad工具和微软官方文档作为学习资源。

R3333355726856的博客 1094
上一篇: 高效的LINQ语句(一)
下一篇: 高效的LINQ语句(三)
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值