linq

创建基于ASP.NET core 3.1 的RazorPagesMovie项目(二)-应用模型类配合基架生成工具生成Razor页面

青春壹個敷衍的年華 提交于 2020-12-06 18:59:03
本节中,将学习添加用于管理跨平台的SQLLite数据库中的电影的类Movie。从ASP.NET core 模板创建的应用使用SQLLite数据库。 应用模型类(Movie)配合Entity Framework core(简称EF core,这是一种对象关系映射框架(ORM),它可以简化数据访问)使用,以处理数据库 模型类称为POCO类,因为它们与EF Core 没有任何依赖关系。它定义了数据库中存储的数据属性。 一、添加数据模型“Movie”   1、右键单击“RazorPagesMovie”项目>"添加">"新建文件夹"。并命名为“Models”      2、右键“Models”文件夹,选择“添加”>"类",并将新类命名为“Movie”:      3、双击Movie.cs文件,并添加以下属性: using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; // 需要手动引用这个名称控件 using System.Linq; using System.Threading.Tasks; namespace RazorPagesMovie.Models { public class Movie { public int ID { get ; set ; } /

FreeSql (二十六)贪婪加载 Include、IncludeMany

别说谁变了你拦得住时间么 提交于 2020-12-06 18:49:12
1、导航属性 ManyToOne ManyToOne 导航属性通过 ToList() 加载,includeNestedMembers 参数说明: false: 返回 2级 Join 的数据; true: 返回所有层级深度 Join 的导航数据; Select<Tag>().Include(a => a.Parent).ToList(); Select<Tag>().Where(a => a.Parent.Name == "1").ToList(); //这样写,不需要再标记 Join,解析表达式时自动处理成 LeftJoin 2、导航属性 OneToMany/ManyToMany IncludeMany 贪婪加载集合的导航属性,其实是分两次查询,在 ToList 后进行了数据重装。 Select<Tag>().IncludeMany(a => a.Songs).ToList(); IncludeMany 有第二个参数,可以进行二次查询前的修饰工作。 Select<Tag>().IncludeMany(a => a.Songs, then => then.Where(song => song.User == "admin")).ToList(); 其实在 then 那里,还可以继续进行向下 Include/IncludeMany。只要你喜欢,向下 100 层都没问题。 3、变异

asp.net core 2.0的认证和授权

拈花ヽ惹草 提交于 2020-12-06 08:17:06
在asp.net core中,微软提供了基于认证(Authentication)和授权(Authorization)的方式,来实现权限管理的,本篇博文,介绍基于固定角色的权限管理和自定义角色权限管理,本文内容,更适合传统行业的BS应用,而非互联网应用。 在asp.net core中,我们认证(Authentication)通常是在Login的Post Action中进行用户名或密码来验证用户是否正确,如果通过验证,即该用户就会获得一个或几个特定的角色,通过ClaimTypes.Role来存储角色,从而当一个请求到达时,用这个角色和Controller或Action上加的特性 [Authorize(Roles = "admin,system")]来授权是否有权访问该Action。本文中的自定义角色,会把验证放在中间件中进行处理。 一、 固定角色: 即把角色与具体的Controller或Action直接关联起来,整个系统中的角色是固定的,每种角色可以访问那些Controller或Action也是固定的,这做法比较适合小型项目,角色分工非常明确的项目。 项目代码: https://github.com/axzxs2001/Asp.NetCoreExperiment/tree/master/Asp.NetCoreExperiment/%E6%9D%83%E9%99%90%E7%AE%A1

ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存

佐手、 提交于 2020-12-06 06:08:35
原文: ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存        ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存 part 1:给我点时间,允许我感慨一下2016年   正好有时间,总结一下最近使用的一些技术,也算是为2016年画上一个完美的句号,回顾2016年,感受颇多,感恩那些帮助我的人。展望2017年,我相信一定会遇到一个更好的自己。附上自己喜欢的一张图片:    好了~~~装逼结束,下面开始说说如何实现分布式缓存在项目中的应用。 part2:先分析以下需求   软件架构从单机到分布式遇到的问题(当然这是一个很深的问题,由于能力有限今天就说说如何实现用户信息的分布式存储的问题),也就是:走向分布式第一步:多台机器共享用户登录状态,该如何实现?例如:现在有三台机器组成了一个web的应用集群,其中一台机器用户登录,然后其他另外两台机器共享登录状态?具体请看下面的图示: 问题:如果有一个用户第一次登陆的时候,负载均衡把该用户分配到IIS1这台服务器上,该用户的信息就会被保留到IIS1这台服务器上,但是如果该用户再次访问其他的web资源的时候,被分配到IIS2上,这是IIS2中,没有改用户的信息,会发生什么?该怎么解决?该选用什么介质来保存状态比较合适? 从图中可以看出就是保存对应用户的信息

Join two lists of different length

亡梦爱人 提交于 2020-12-05 05:01:06
问题 I am using LINQ: List<String> listA = new List<string>{"a", "b", "c", "d", "e", "f", "g"}; List<String> listB = new List<string>{"1", "2", "3"}; Desired result: {"a", "1", "b", "2", "c", "3", "d", "1", "e", "2", "f", "3", "g", "1"} I tried but fail: var mix = ListA.Zip(ListB, (l1, l2) => new[] { l1, l2 }).SelectMany(x => x); //Result : {"a", "1", "b", "2", "c", "3"} var mix = ListA.Zip(ListB, (a, b) => new[] { a, b }) .SelectMany(x => x) .Concat(ListA.Count() < ListB.Count() ? ListB.Skip

C# LINQ查询表达式用法对应Lambda表达式

∥☆過路亽.° 提交于 2020-12-05 00:55:23
C#编程语言非常优美,我个人还是非常赞同的。特别是在学习一段时间C#后发现确实在它的语法和美观度来说确实要比其它编程语言强一些(也可能是由于VS编译器的加持)用起来非常舒服,而且对于C#我觉得他最优美之处不仅仅是语法糖方面还有就是体现在LINQ和Lambda表达式。 本篇文简单介绍一下关于C#当中LINQ表达式和其对应的Lambda表达式的用法,关于这两部分内容的相关参考资料: 人民邮电出版社《C#程序设计及应用教程》(第3版) 博客园博客:《 c# Linq查询 》 同时在介绍的时候我会尽量挑出重要部分同时加上我自己的理解和认识,如有偏差还请指教。 首先先让我们看一下什么是LINQ查询表达式和Lambda表达式: 运行结果: 以上是对LINQ查询表达式和Lambda表达式的一个简单的应用,都是查询stu列表中年龄大于等于20岁的结果并且把结果按照年龄降序排列。 由此可见Linq表达式和Lambda表达式并没有什么可比性,只是用Lambda可以实现LINQ的查询语句。 那与Lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在《深入理解C#》中称其为“点标记”。 例子中主要以LINQ表达式为主,LINQ表达式结构更为清晰易于理解,同时也会给出对应的点标记写法(所有的LINQ查询表达式都可以转成对应的点标记。反之,不是所有的点标记都可以转成查询表达式。)

Linq表达式、Lambda表达式你更喜欢哪个?

爷,独闯天下 提交于 2020-12-04 04:53:26
什么是Linq表达式?什么是Lambda表达式? 如图: 由此可见Linq表达式和Lambda表达式并没有什么可比性。 那与Lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在《深入理解C#》中称为点标记。 查询表达式、点标记你更喜欢哪个? 所以,我们的标题的提问根本就不合适。应该是“查询表达式和点标记你更喜欢哪个?”。如: //查询表达式 var students1 = from t in db.Students where t.Name == "张三" select new { t.Id, t.Name, t.Age }; //点标记 var students2 = db.Students .Where(t => t.Name == "张三") .Select(t => new { t.Id, t.Name, t.Age }); 为什么选择点标记 我相信更多的人偏向选择点标记。具体什么原因我也说不清(可能是点标记中的Lambda更加优雅吧)。对于我个人来说,也是更加喜欢点标记这种方式。 1、所有的查询表达式都可以转成对应的点标记。反之,不是所有的点标记都可以转成查询表达式。 为什么?因为查询表达式在编译后就直接变成了点标记:(以下是上面两个语句对应的编译后的反编译C#代码) 生成了一模一样的代码。(由于是编译后的,好多乱七八糟的代码

如何使用 C# 扩展方法

假装没事ソ 提交于 2020-12-02 23:13:47
译文链接:https://www.infoworld.com/article/3130492/how-to-work-with-extension-methods-in-c.html C# 在 3.0 版本中提供了对 扩展方法 的支持,扩展方法常用于给一个已存在的类添加新的方法从而扩展该类的功能,最关键的是:你不需要在现存类中派生一个子类,你也不需要破坏性的修改类的现有代码骨架,更谈不上重新编译了,扩展方法能够提供代码可读性的同时又可以扩展类的功能。 .NET 框架中最常见的扩展方法包括 Linq 标准的查询操作,这类扩展方法极大的扩展了 System.Collections.IEnumerable 和 System.Collections.Generic.IEnumerable<T> 的查询能力,如下图: 现在你明白了扩展方法,你可以用这项技术去给已存在的 class 或者 interface 添加更多实用方法而不应该从子类中新增额外的方法,MSDN上说:扩展方法允许你给现有的类 添加 方法,而不需要你生成子类,重新编译,或者任何其他形式的修改原有类,扩展方法是一种特殊的静态方法,当你调用它的时候就好像它就是你扩展类的原生方法。 本质上来说,扩展方法也算是一种特殊的静态方法,它允许你给已存在的类添加新的方法即使你没有权限访问这个扩展类的源代码,扩展方法除了签名中的第一个参数是

Count number of given object in a list with LINQ

谁都会走 提交于 2020-12-02 10:12:52
问题 I have a list which can contain multiple occurrences of the same object. Now I need to count, how often the given object is contained in this list. int count = 0; foreach (IMyObject item in myList) if (item == object2Count) count++; I am sure that this can be done nicer with LINQ, but LINQ is still a mystery to me. My first question is: How would I count the objects via LINQ and the second question: Will this LINQ version be slower or faster? I am using a ObservableCollection and the number

Count number of given object in a list with LINQ

别来无恙 提交于 2020-12-02 10:10:50
问题 I have a list which can contain multiple occurrences of the same object. Now I need to count, how often the given object is contained in this list. int count = 0; foreach (IMyObject item in myList) if (item == object2Count) count++; I am sure that this can be done nicer with LINQ, but LINQ is still a mystery to me. My first question is: How would I count the objects via LINQ and the second question: Will this LINQ version be slower or faster? I am using a ObservableCollection and the number