![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
.Net
文章平均质量分 87
懒人Ethan
毕业于天津理工大学,拥有超过10年dotnet和前端开发经验。PMP认证,Microsoft Certified认证。精通ASP.NET/ASP.NET Core、Angular和Vue的开发。
展开
-
EF Core中带过滤器参数的Include方法
本文主要介绍EF Core 5.0中一个新特性,就是Include方法支持带过滤器的委托参数,并且说明一下该特性在实际使用中的一个大坑,希望读者在未来的开发中避免踩坑。原创 2023-10-26 22:15:01 · 1212 阅读 · 0 评论 -
一个Entity Framework Core的性能优化案例
本文提供一个EF Core的优化案例,主要介绍一些EF Core常用的优化方法,以及在优化过程中,出现性能反复的时候的解决方法,并澄清一些对优化概念的误解,例如AsNoTracking并不包治百病。原创 2023-10-25 17:59:31 · 1223 阅读 · 0 评论 -
EF Core 批量插入操作原理分析
本文主要讨论EF Core 在批量添加操作的基本原理和优化方式,基本原理主要针对EF Core 6.0 和7.0两个版本。原创 2023-10-18 18:05:02 · 1031 阅读 · 0 评论 -
解决ASP.NET Core的中间件无法读取Response.Body的问题
本文主要介绍如何在ASP.NET Core的中间件中,读取Response.Body的方法,以便于我们实现更多的定制化开发。本文介绍的方法适用于.Net 3.1 和 .Net 6。原创 2023-10-04 12:35:41 · 1838 阅读 · 2 评论 -
C#中的IQueryable vs IEnumerable (二)
IQueryable 的主要作用是通过其扩展方法和调用过程中使用的委托参数,将这些内容转换成表达式目录树。第三方的ORM框架可以在此基础上进行SQL语句的转换。原创 2023-09-11 18:28:20 · 933 阅读 · 1 评论 -
C# Linq源码分析之Take(四)
本文主要对Take的优化方法进行源码分析,分析Take在配合Select,Where等常用的Linq扩展方法使用时候,如何实现优化处理。本文涉及到Select, Where和Take和三个方法的源码分析,其中Select, Where, Take更详尽的源码分析,请参考我之前写的文章。原创 2023-08-28 14:25:28 · 1007 阅读 · 0 评论 -
C# Linq源码分析之Take (三)
本文在前两篇Take源码分析的基础上,着重分析Range参数中有倒数的情况,即分析TakeRangeFromEndIterator的源码实现。原创 2023-08-18 17:33:55 · 413 阅读 · 0 评论 -
C# Linq源码分析之Take (二)
本文主要分析Linq中Take带Range参数的重载方法的源码。原创 2023-08-17 15:44:05 · 732 阅读 · 0 评论 -
C# Linq源码分析之Take (一)
新的Take重载方法不再接收整数参数,而是接收一个Range类型的参数。它可以从序列中返回指定范围的连续元素。注意:该方法只能在.Net 6 或更高版本中使用,我们之前用的.Net 4.7, 4.8或.Net Core 3.1中,都不支持该方法。原创 2023-08-14 15:26:06 · 951 阅读 · 0 评论 -
C# Linq源码分析之Take方法
基本功能是从序列source中,返回指定个数count的相邻元素。原创 2023-08-11 16:44:06 · 1752 阅读 · 0 评论 -
C# 中使用ValueTask优化异步方法
我们在开发过程中,经常使用async的异步方法,但是有些时候,异步的方法中,可能包含一些同步的处理。本文主要介绍通过ValueTask这个struct,优化异步处理的方法性能。原创 2023-08-01 14:22:34 · 577 阅读 · 0 评论 -
C#中 使用yield return 优化大数组或集合的访问
我们在开发过程中,经常需要在一个很大的数组或集合中搜索元素,以满足业务需求。本文主要介绍通过使用yield return的方式,避免将大量数据全部加载进入内存,再进行处理。从而提高程序的性能。原创 2023-07-31 13:58:10 · 385 阅读 · 0 评论 -
C# LINQ源码分析之ToList()
在开发过程中,LINQ的ToList()方法经常被使用,帮助我们将将迭代器转换为具体的List对象。为了更好的了解该方法的工作原理,我们从源码的角度对其进行分析。原创 2022-07-12 17:32:24 · 5223 阅读 · 1 评论 -
C# LINQ源码分析之Count
LINQ代码库中的Count方法作为数据统计的关键方法,经常被使用。在统计数据时候,Count方法是否每次都要遍历整个序列来获取序列元素个数,Count方法内容是否存在优化机制。为了更好的了解该方法的工作原理,我们从源码的角度对其进行分析。......原创 2022-07-04 16:07:05 · 3563 阅读 · 1 评论 -
C# LINQ源码分析之SelectMany
概要在开发过程中,LINQ代码库中的SelectMany方法作为嵌套循环的语法糖,经常被使用,为了更好的了解该方法,我们从源码的角度对其进行分析,以了解其内部工作方式。SelectMany方法介绍SelectMany方法的基本功能是将序列中的每个元素投影到IEnumerable中,并将生成的序列平铺到一个序列中。LINQ代码库提供了4个SelectMany的重载方法如下:方法名称基本介绍SelectMany<TSource,TCollection,TResult>(I原创 2022-02-22 11:46:07 · 2438 阅读 · 0 评论 -
C# LINQ源码分析之Select
在开发过程中,LINQ代码库中的Select方法经常被使用,为了更好的了解该方法,我们从源码的角度对其进行分析。了解如何以最优的方式,使用该方法,从而提升代码的性能。原创 2022-02-15 17:27:54 · 10835 阅读 · 2 评论 -
C# LINQ源码分析之迭代器
迭代器是LINQ中的很多方法的实现基础,像Where,Select或Distinct等常用的LINQ方法底层都是通过迭代器最终实现的。本文从源码角度解释一下迭代器的工作原理,包括像延迟加载,多线程支持,嵌套循环这些问题,如何通过源码最终实现的。本文以Distinct方法来作为例子,说明迭代器的工作原理。将源码中的iterator.cs, Distinct.cs抽取出来,加上一定的日志,以方便我们了解代码的执行流程。原创 2022-02-11 23:09:14 · 935 阅读 · 0 评论 -
C# Linq 源码分析之Distinct方法
C# Linq 源码分析之Distinct方法原创 2022-02-10 15:19:21 · 5862 阅读 · 0 评论 -
Javascript和C# Linq迭代器比较
概要无论前端后端,迭代器在我们的开发中大量使用。本文主要从实现和原理两个方面,比较JS和C#中迭代器,从而加深我们对迭代器这种编程模式的理解。代码实现本文通过迭代一个学生属性的实例来实现JS和C#迭代器。JS迭代器的实现var student = { 0: "XC-001", 1: "Tom", 2: "Room-01", length : 3}student.__proto__[Symbol.iterator] = function(){ var cu原创 2022-01-24 18:02:52 · 907 阅读 · 0 评论 -
审计数据在EntityFramework中的解决方案
概要我们在项目开发中,通常会有数据审计的项目需求。即业务数据中要包含创建日期,修改日期,修改人等信息等。有些业务数据需要物理删除,有些数据需要逻辑删除。通常审计数据并不大量参与业务运算,只是为审计提供技术支持。如果我们在项目开发中,花费大量时间在这些审计数据的处理上,显然得不偿失。本文提出了一个简单的审计数据处理模型,通过EntityFramework加以实现。审计数据的需求总结核心所有业务数据都要包括数据的创建人,创建时间,修改时间和修改人。大部分核心数据要支持逻辑删除,所以要包括删除人,删原创 2021-12-13 18:05:33 · 1426 阅读 · 0 评论 -
ASP.NET Core中数据绑定的Attribute
概要ASP.NET Core的Web API在调用过程中,经常涉及到Client端参数传递和Server端参数的接收的问题。其中参数主要包括URL参数,表单参数和路由参数等,如何处理好各种类型的参数传递,尤其是复杂类型参数的处理,是正确调用Web API的关键也是难点。本文通过介绍FromQueryAttribute,FromRouteAttribute和FromBodyAttribute三个Attribute,来介绍如果在URL,表单和路由中传递对复杂的对象参数。定义FromQueryAttrib原创 2021-10-28 17:49:08 · 2095 阅读 · 0 评论 -
ASP.NET Core依赖注册自动化实现
概要在ASP.NET CORE开发项目过程中,我们在封装了用户的业务逻辑之后,要按照ASP.NET 自带的DI框架的要求,将我们封装好的业务逻辑类注册到ServiceCollection容器中,这样做避免了我们手工实例化对象,为开发带来了便利。但是我们也应该看到,在带来便利的同时,我们也不得不手工维护注册的代码。对于大型项目,用户的业务逻辑可能非常复杂,需要封装大量的业务类。同样,在项目迭代周期内,也会产生大量新的业务需求,需要反复修改注册的代码。解决方案基于当前的问题,本文提出一种服务自动发现,自原创 2021-08-08 16:55:09 · 683 阅读 · 1 评论 -
C# Linq源码分析之Where
概要在Dotnet 开发过程中,无论是Web还是Form或是其他领域的开发,Where作为IEnumerable的扩展方法,十分常用。本文对Where方法的关键源码进行简要分析,以方便大家日后更好的使用该方法。本文分析的源码来自 https://github.com/dotnet/runtime.git代码结构分析Where方法的过滤功能主要通过迭代器实现,其源代码包含7个迭代器。按照功能划分如下:索引参与过滤操作运算的迭代器WhereIterator,容器包含Enmuerable,List和A原创 2021-07-23 16:29:08 · 1963 阅读 · 6 评论