在本博客中,我将分享我学到的有关 C# 的 20 个重要知识 — 从掌握面向对象的编程 (OOP) 到了解异步编程的强大功能,再到采用 LINQ 和模式匹配等现代功能。...类型安全 C# 是强类型的,这意味着变量必须具有声明的类型,从而减少运行时错误并提高代码质量。...LINQ(语言集成查询) LINQ 提供直接集成到 C# 中的查询语法,允许使用最少的样板代码高效查询数组、集合、数据库和 XML。 5....扩展方法 扩展方法允许您将方法添加到现有类型中,而无需修改其源代码,从而提高了代码重用的灵活性。 10....记录类型 (C# 9.0+) C# 中的记录类型提供不可变的引用类型,非常适合创建只关心值而不关心行为的数据模型。 14.
使用自动生成的源时,无需重新创建源文件便可将代码添加到类中。 Visual Studio 在创建 Windows 窗体、Web 服务包装器代码等时都使用此方法。...在有一种情况下,匿名方法提供 Lambda 表达式中没有的功能。 使用匿名方法可省略参数列表。 这意味着匿名方法可转换为具有多种签名的委托。 Lambda 表达式无法实现这一点。...可以将 true、false 或 null 赋值给 Nullable。 处理数据库和其他包含不可赋值的元素的数据类型时,能够将 null 赋值给数值类型和布尔类型会特别有用。...---msdn 优点: 1.可动态修改可执行代码 2.动态执行各个数据库中的LINQ查询 3.创建动态查询 4.表达式树还可在动态语言运行时DLR中用来提供动态语言和.NET Framework之间的互操作性...该目标针对新库功能无缝集成到语言的简洁设计进行了平衡。 未来版本的 C# 中还会包括需要标准库中的新类型和成员的新功能。 必须了解如何管理工作中的这些依赖项。
一、LINQ概念 LINQ是微软在.NetFramework3.5中新加入的语言功能,在语言中以程序代码方式处理集合的能力。...命名空间都已实现 IEnumerable,一般来说在.NET内的所有集合对象都能使用LINQ进行处理,如果不引用System.Linq命名空间,所有Linq功能都无法使用。...对象初始化器:允许程序中通过声明方式直接给对象属性进行数值的初始化,而不必建立有参数的构造函数。(字典类型必须按照特定格式初始化) 匿名类型:不定义类的情况下生成新的类,Linq中常用。...2.3 类型推论 使用匿名类型在Linq中变量类型无法确定,如果试用IEnumerable就失去强类型的好处,在.NET3.5中只要使用Linq并且以select new来产生结果的查询...):相当于数据库的Cross Join,这个的查询结果是笛卡尔积,就是两个表数据的乘积,将表一所有数据和表二连接,通过例子: ?
你可以使用Northwind演示数据库进行LINQ的学习。...连接到数据库之后,LINQPad支持使用SQL或C#语句(点标记或查询表达式)进行查询。...内连接和分组连接的一个重要区别是:分组连接的结果数一定和左边的表的记录数相同(例如本例中左边的表Defects有41笔记录,则分组连接的结果数一定是41),即使某些左边表内的记录在右边没有对应记录也无所谓...点标记比查询表达式具有更高的可读性(并非对所有人来说,见仁见智) 点标记体现了面向对象的性质,而在C#中插入一段SQL让人觉得不伦不类(见仁见智) 点标记可以轻易的接续 Join时查询表达式更简单,看上去更像...如果使用LINQ,则整个过程将会简化为只剩一句话。 C# 2.0中匿名函数的提出使得我们可以把Predicate方法内联进去。如果没有匿名函数,每一个查询你都要写一个委托目标方法。
若要使用标准查询运算符,请先使用 using System.Linq 指令将它们置于范围中。 ...它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。 仅当你使用 using 指令将命名空间显式导入到源代码中之后,扩展方法才位于范围中。...例如,若要使用标准查询运算符,请将此 using 指令添加到代码中: using System.Linq; (你可能还必须添加对 System.Core.dll 的引用。)...只要有可能,必须扩展现有类型的客户端代码都应该通过创建从现有类型派生的新类型来达到这一目的。 有关详细信息,请参阅继承(C# 编程指南)。...在使用扩展方法来扩展你无法更改其源代码的类型时,你需要承受该类型实现中的更改会导致扩展方法失效的风险。
Mobius: C# API for Spark -Mobius将C#语言绑定添加到Apache Spark,实现了C#中的Spark驱动程序代码和数据处理操作。...- 新的现代ASP.NET MVC Web应用程序的起点,具有最佳实践和最流行的工具。...- 编译C#代码,首先使用简单的过程代码重写LINQ表达式的语法树,最大限度地减少分配和动态调度。...将传统和结构化诊断日志记录的最佳方法结合在一个易于使用的包中。...还可让您以交互方式查询LINQ中的数据库。
4.5.x or above aspnet-api-versioning – 将服务API版本添加到ASP.NET Web API,使用ASP.NET Web API的OData和ASP.NET Core...MicroElements.Swashbuckle.FluentValidation – 将SwluentValidation规则添加到swagger中。...NReco.PivotData – 具有OLAP操作和数据透视表数据模型的内存数据立方体。 roundhouse – 使用sql文件和基于源代码控制的版本控制的.NET数据库迁移实用程序。...LINQ to DB(linq2db) – 最快的LINQ数据库访问库,在POCO对象和数据库之间为10多个具有完全SQL支持的数据库引擎提供简单,轻量,快速且类型安全的层。...用品 基础知识 Microsoft架构概述了具有相关视频的全面BikeSharing360演示应用程序套件 将.NET Framework库移植到.NET Core CLR在执行一行代码之前所做的68
然后,我示范了你可以如何使用一些值来生成一个List集合的实例,然后使用由LINQ提供的新的Where和Average扩展方法来返回集合中的人的一个子集,以及计算这个集合中的人的平均年龄...但考虑一下你想要查询数据库里的数据的情形(下面的代码是使用Orcas中内置的LINQ到SQL对象关系映射器写成的) : ?...我绝对不想 要看到发生的是,从数据库里取回所有的产品记录,将它们放在一个局部的集合里,然后在内存里对它运行Where()扩展方法来进行过滤。这么做效率极其不 高,对大数据库的扩缩性将是极差的。...那样的话,我只返回那些符合查询条件的记录,这样的数据库查询效率是非常高的。...在下几个星期里,我将完成这个从理论的层次上讨论新核心语言概念的语言系列,然后转到讨论一些极其实用的实战例子(特别是针对数据库和XML文件使用LINQ的场景)。 希望本文对你有所帮助,
如果 await 未用在 async 方法的主体中,C# 编译器将生成一个警告,但此代码将会以类似普通方法的方式进行编译和运行。...请注意这会导致效率低下,因为由 C# 编译器为异步方法生成的状态机将不会完成任何任务。 应将“Async”作为后缀添加到所编写的每个异步方法名称中。...其他任何对 async void 的使用都不遵循 TAP 模型,且可能存在一定使用难度,例如: async void 方法中引发的异常无法在该方法外部被捕获。...在 LINQ 表达式中使用异步 lambda 时请谨慎 LINQ 中的 Lambda 表达式使用延迟执行,这意味着代码可能在你并不希望结束的时候停止执行。...如果编写不正确,将阻塞任务引入其中时可能很容易导致死锁。 此外,此类异步代码嵌套可能会对推断代码的执行带来更多困难。 Async 和 LINQ 的功能都十分强大,但在结合使用两者时应尽可能小心。
让我们来看看今天就能在C#项目中使用的五种实用模式。 高阶函数 高阶函数可以接收其他函数作为参数或将函数作为结果返回。它们让你能够编写更灵活和可组合的代码,因为你可以像传递数据一样传递行为。...高阶函数的常见例子是LINQ中的Where和Select,它们接收用于转换数据的函数。...将错误作为值 C#中的错误处理通常是这样的: public classUserService { publicUserCreateUser(string email,string password...纯函数 纯函数是可预测的:它们只依赖于输入,不会改变系统中的任何东西。没有数据库调用,没有API请求,没有全局状态。这种约束使它们更容易理解、测试和调试。...相反,它们为每个更改创建新的实例。这个简单的约束消除了整类bug:竞态条件、意外修改和不一致状态。
在javase8中,lambda表达式的形式基本好C#中一致,Stream和LINQ类似,Future和Task类似,可以这样说,javase8大体达到了C#编码的便捷程度哈!...", "Beijing"); filter,map,flatmap方法 分别对应C#中Linq的where,select和selectMany Optional tempTT...String.join("/", "user", "local", "bin"); 数字扩展 Long testValue = Integer.toUnsignedLong(Integer.MAX_VALUE); 新的数值函数...向绝对值最大的方向舍入,只要舍弃位非0即进位。 2、ROUND_DOWN:向下取整(丢掉小数)。趋向零方向舍入。向绝对值最小的方向输入,所有的位都要舍弃,不存在进位情况。...注意,在重复进行一系列计算时,此舍入模式可以将累加错误减到最小。 8、ROUND_UNNECESSARY 断言请求的操作具有精确的结果,因此不需要舍入。
其中,LINQ查询和表达式是C#高级主题中的一项关键内容,具有以下重要性和优势: 数据处理和操作: 在现代软件中,数据处理和操作是至关重要的。...从CSV文件中读取数据:使用开源库(如CsvHelper)将CSV文件中的数据转化为对象。 从数据库中读取数据:使用ADO.NET或ORM工具获取数据库中的数据。...每次创建匿名类型的实例时,实际上都创建了一个新的类,其属性名和类型都与查询结果的属性相匹配。 由于匿名类型是临时的,所以它只能在查询范围内使用,无法将其传递到方法之外。...匿名类型的属性是只读的,无法修改其值。 Tip:使用匿名类型能够使代码更简洁,并且无需显式定义类,适用于临时处理查询结果的情况。...七、LINQ与数据库 7.1 使用LINQ进行数据库查询 使用LINQ进行数据库查询通常涉及使用ORM(对象关系映射)工具,如Entity Framework,它允许你将数据库中的表映射为.NET对象,
它更容易在核心组件驱动程序上使用api,并具有异步方法,并支持Linq....使用数据库对象,可以从数据库创建、重命名、检索或获取集合列表。文档存储在集合中,如果你对SQL比较熟悉的话,可以将集合视为表,将文档视为表中的记录。...获取一个集合 在讨论了创建集合之后,还需要一个额外的步骤来检查集合是否存在,创建它,然后将文档添加到集合中。如果集合不存在,GetCollection会自动创建一个集合,并将文档添加到该集合中。...="C#是世界上最好的语言", PublishYear=2020, }, }; } 使用上面的代码,我们可以将集合的文档类型更改为新类...,在下一篇文章中,我将介绍如何对文档进行检索以及为此构建的各种filter及linq查询技巧,有兴趣的可以关注下我的公众号“DotNetCore实战”第一时间进行更新!
简介:ref和out是C#开发中经常使用的关键字,所以作为一个.NET开发,必须知道如何使用这两个关键字. 1、相同点 ref和out都是按地址传递,使用后都将改变原来参数的数值。...C#中的函数只能有一个返回值的问题 (2)、代码示例: using System; using System.Collections.Generic; using System.Linq; using...(2)、out关键字 (1)、使用out关键字的注意点: i、方法定义和调用方法都必须显式使用 out关键字 ii、out关键字无法将参数值传递到out参数所在的方法中,只能传递参数的引用(个人理解),...所以out参数的参数值初始化必须在其方法内进行,否则程序会报错 iii、通过out的这个特性,一定程度上解决了C#中的函数只能有一个返回值的问题 (2)、代码示例 using System; using...例如,从编译的角度来看,以下代码中的两个方法是完全相同的,因此将不会编译上面的代码 ii、 using System; using System.Collections.Generic; using System.Linq
使用 ML.NET,可以将许多常用机器学习方案添加到应用中,如情绪分析、建议、预测、图像分类等。若要了解详细信息,请访问 bit.ly/2OLRGRQ。...在 EF Core 3.0 中,我们计划深入更改 LINQ 实现工作原理和测试方式,旨在提高它的可靠性(例如,避免破坏修补程序版本中的查询);让它能够将更多表达式正确转换为 SQL;在更多情况下生成高效查询...此提供程序将针对 Cosmos DB 中的 SQL API 启用大部分 EF Core 功能,如自动更改跟踪、LINQ 和值转换。...我们计划在 EF Core 3.0 中添加的其他功能包括,属性包实体(将数据存储在索引属性(而不是常规属性)中的实体);能够将数据库视图反向工程为查询类型;以及与新 C# 8.0 功能集成,如 IAsyncEnumerable...NET Core 中约有 800 名新成员,几乎所有这些成员都已添加到 .NET Standard 2.1 中。
LINQ to SQL 是 Microsoft 提供的一种用于 .NET Framework 的对象关系映射器(ORM),它允许开发人员使用 LINQ 查询语法来操作数据库中的数据,而无需直接编写 SQL...LINQ to SQL 是 LINQ 的一部分,它专注于将数据库表映射到 C# 类,并提供了一种声明式的方式来查询这些类。...通过 LINQ to SQL,你可以将数据库表中的每一行映射为一个对象,并且可以像操作内存中的对象一样操作数据库中的数据。...基本步骤创建数据模型:使用 LINQ to SQL 工具自动生成或手动创建与数据库表对应的 C# 类。执行查询:使用 LINQ 查询语法来检索、更新、插入或删除数据。...映射问题确保属性名称一致:如果数据库表中的列名与 C# 类中的属性名不匹配,则需要在模型类中使用 [Column] 属性进行显式映射。
Dapper Dapper是一个简单的.NET对象映射器,在速度方面具有"King of Micro ORM"的头衔,几乎与使用原始的ADO.NET数据读取器一样快。...SmartSql将管理你的 SQL ,并且通过筛选标签来维护本来你在代码层面的各种条件判断,使你的代码更加优美。 主要特点:简洁、高效、高性能、扩展性、监控、渐进式开发!...在架构上,它比 Dapper、Massive 或 PetaPoco 等微 ORM 高出一步,因为您使用 LINQ 表达式,而不是魔术字符串,同时在代码和数据库之间维护一个薄抽象层。...您的查询由 C# 编译器检查并允许轻松重构。 但是,它不像 LINQ to SQL 或实体框架那么重。...它经过高度测试,并被生产环境中运行的各种关键系统使用。
2、提高程序灵活性和效率的利器:Natasha动态编译库 该项目是基于Roslyn的C#动态程序集构建库,使用该库允许开发者动态运行C#代码,方便动态的新增和升级模块和代码,该项目还集成了域管理、插件管理等功能...3、一个C#开发的NoSQL数据库 LiteDB是一个开源的、轻量级的数据库引擎,提供了简单、快速和可靠的数据存储功能,可用于任何移动、各种操作系统等平台。...LiteDB采用C#开发,是一个单文件库,支持事务、索引等,并提供了简单易使用的接口,可以轻松地添加到任何项目中,为数据存储提供简单而有效的解决方案。...; 3、函数组合:提供了方便的函数组合功能,使你能够将多个函数组合在一起,形成一个新的函数。...事件驱动:支持事件驱动的工作流,即工作流可以在特定事件发生时启动或恢复。 易于使用:API非常简单易用,使得开发者可以快速上手并集成到其应用程序中。
语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。 数据查询历来都表示为简单的字符串,没有编译时类型检查或 IntelliSense 支持。...对于编写查询的开发者来说,LINQ 最明显的“语言集成”部分就是查询表达式。 查询表达式采用声明性查询语法编写而成。 使用查询语法,可以用最少的代码对数据源执行筛选、排序和分组操作。...可使用相同的基本查询表达式模式来查询和转换 SQL 数据库、ADO .NET 数据集、XML 文档和流以及 .NET 集合中的数据。...在 C# 中可为以下对象编写 LINQ 查询:SQL Server 数据库、XML 文档、ADO.NET 数据集以及支持 IEnumerable 或泛型 IEnumerable 接口的任何对象集合...,显示了使用 C# 和 Visual Basic 针对 SQL Server 数据库编写的不完整 LINQ 查询,并具有完全类型检查和 IntelliSense 支持: ?
要使用示例数据设置 Atlas 集群,您可以按照文档中的步骤操作。我们将创建一个简单的 .NET 控制台应用程序来开始使用 MongoDB EF Core 提供程序。...让我们点击“继续”并检查数据库中的文档。我们可以看到新字段尚未添加。让我们跳过将结束程序的“保存更改”调用。此时,如果我们检查数据库中的文档,我们会注意到新字段已添加,如下所示!...我们将了解如何在同一个应用程序中使用驱动程序创建新索引。首先,我们将列出集合中的索引,以查看哪些索引已经存在。MongoDB 默认在 _id 字段上创建索引。...我们可以将数据库创建移到变量中,这样我们就不必再次定义数据库的名称。有了这个新上下文,让我们为电影添加续集并将其添加到 DbSet。...由于事务已回滚,以下仅显示数据库中的单个文档。 别担心,我们会正确地将我们的三部曲添加到数据库中。让我们删除第三个实体上的 _id 分配,让 MongoDB 自动为我们插入它。
领取专属 10元无门槛券
手把手带您无忧上云