当前位置: 首页 > news >正文

食品网站建设目的北京市建设工程招标网站

食品网站建设目的,北京市建设工程招标网站,用php做的网站软件,网站 扁平化开始Linq前你要知道的 扩展方法 顾名思义就是对现有类进行扩展的的方法#xff0c;扩展方法可以在不修改现有类的情况下#xff0c;为现有类增加公共的接口#xff08;不是C#中的interface#xff09;。 扩展方法本质上是一个静态方法#xff0c;不同之处在于它的第一个参…开始Linq前你要知道的   扩展方法   顾名思义就是对现有类进行扩展的的方法扩展方法可以在不修改现有类的情况下为现有类增加公共的接口不是C#中的interface。   扩展方法本质上是一个静态方法不同之处在于它的第一个参数必须有this关键字声明并且第一个参数的类型即为要扩展的类型。如 public static double ToDouble(this string source) {double res 0d;double.TryParse(source, out res);return res; }public static void SimpleExtesionMethod() {double d 12345.54321.ToDouble();Console.WriteLine(d); } 这里是个简单的将字符串转为double类型的扩展方法只要引用了该方法的命名空间则都可以直接用string类型来调用ToDouble方法。   扩展方法是后文的基础C#3.0中的Linq的实现都是基于扩展方法通过对IEnumerableT接口Linq to Objects的扩展和对IQueryableT的扩展来实现Linq的相关功能而Linq的相关关键字最终都是转化为对IEnumerableT(IQueryableT)的调用。   Lambda表达式   lambda表达式其实就是.net2.0中的匿名方法然后再3.0中以一种更优美的姿态呈现出来。   lambda表达式的基本语法为   (参数列表) {语句块;}    或者  ( 参数列表) 表达式   当参数列表中只有一个参数的时候圆括号可以省略 Funcstring, string func x x x; Console.WriteLine(func(a)); Var隐式类型化变量   使用与可以由编译器推导出的变量的声明不需要显式指定对象的类型。 var container new Liststring { 张三, 李四, 王五 }; IEnumerablestring query from name in containerselect name;   上例中由于定义中已经指明了对象的类型声明中已经完全没有必要使用显示的类型定义所以可以使用var关键字。   对于匿名对象 var test new { Name Sth., Type UnKnown }; 由于无法用一个类型类声明匿名对象此时可以用var是声明。   注意var只是省下了显式声明的过程而C#本身就是静态语言所以var所声明的变量的类型已经确定任然是不能改变的亦即var并非是变体类型。 Linq对谁适用   linq的语法通过System.Linq下面的Enumerable类提供支持通过观察他的签名你就会发现他为IEnumerableT实现了一系列的扩展方法也就是说只要是实现了IEnumerableT的对象都可以使用Linq的语法来查询。   而对于只实现了IEnumerable接口而没有实现IEnumerableT的对象可以通过   public static IEnumerableTResult CastTResult(this IEnumerable source);   来将IEnumerable接口转为IEnumerableT例如ArrayList。 Linq中的关键字   在C#3.0中为Linq引入了一些新的关键字他们是   from join where group into let orderby select   熟悉Sql的同学看着是不是有些眼熟呢其实在Linq中他们的涵义和在SQL中类似的所以会很容易理解的。接下来的时间简单介绍下这些关键字的使用。 from   from子句是一个Linq查询的开始任何一个Linq语句都是以from开始from子句指定查询的容器和在此语句有效的局部变量用来指定容器中的一项from子句的效果很类似于foreach。from子句的语法为 from local in container local就是在此Linq语句中的局部变量由于container必须为IEnumerableT他的类型可以由container推导出来即T。上一段简单的例子 ar container new Liststring { 张三, 李四, 王五 }; var query from name in containerselect name;foreach (string name in query) {Console.WriteLine(name); } 输出: 张三 李四 王五 如果container仅仅实现IEnumerable而没有实现IEnumerableT则需要显式指定局部变量的类型或者是使用Cast转为IEnumerableT var container new ArrayList { 张三, 李四, 王五 }; var query from name in container.Caststring()select name; //或者 var query1 from string name in containerselect name; select   对查询的结果进行投影在子句中指定要选择的列如上例。有的时候我们只需要投影某一列我们可以这样 private static void TestSelectSingleProperty() {var persons GetPersons();var query from p in personsselect p.Name;foreach (var item in query){Console.WriteLine(item);} } 我们还可以指定要投影的列的集合这个时候我们要用到匿名类型 var query from p in personsselect new { p.ID, p.Name };foreach (var item in query) {Console.WriteLine(No:{0},Name:{1},item.ID,item.Name); } query中的每一项都时候一个拥有ID属性和Name属性的对象当然有的时候实体的属性名不是我们想要的或者是通过对属性计算得来的那么我们可以显式指定属性名就像下面这样 var query from p in personsselect new{UserID p.ID,FriendName p.Gender 男 ? Mr : Ms p.Name};foreach (var item in query) {Console.WriteLine(No:{0},Friendly Name:{1}, item.UserID, item.FriendName); } where   对容器内的数据进行筛选。 var query from p in personswhere p.DepartmentID 1select p.Name; join   类似SQL里的joinLinq中的join子句用于将两个容器的数据以某种关系进行关联。 var departments GetDepartments(); var persons GetPersons();var query from d in departmentsjoin p in persons on d.ID equals p.DepartmentIDselect new { d, p }; 值得注意的是join子句只能使用equals或者是not equal而不能用其他运算符都不行。而equals运算符左边必须联接的左部右边为右部不能调换的否则编译不能通过。 into   into子句用于将join或者是group子句的结果进一步持续化包装成为一个   System.Linq.IGroupingTKey, TElement对象   而且IGrouping继承自IEnumerableTElement可以看出IGrouping接口提供分组的键和该键下所包含的集合。例子见group group   对结果按照指定的条件进行分组 var container new Liststring { ZhangSan, LiSi, Wangwu, ZhaoLiu, Deng }; var query from name in containergroup name by name.Length into gselect new { g.Key, Values g }; 例子演示了通过姓名的长度对一个姓名列表进行分组并将分组的结果保持到局部变量g中可以通过下面的代码将query的结果输出 foreach (var group in query) {Console.WriteLine({0}:, group.Key);foreach (var item in group.Values){Console.WriteLine(item);} } let   let子句用于在查询中添加一个新的局部变量使其在后面的查询中可见 var query from p in personslet friendlyName p.Gender 男 ? Mr : Ms p.Nameselect new{UserID p.ID,FriendName friendlyName};foreach (var item in query) {Console.WriteLine(No:{0},Friendly Name:{1}, item.UserID, item.FriendName); } 在IEnumerableT上的其他扩展   Take Skip   用于选取前XX个或者和跳过前个如选择第到个则可以 query.Skip(10).Take(10); OrderBy OrderByDescending   排序而已 query.OrderBy(c c.Length); Distinct Union Intersect Except 这些单词都见过吧分别就是取不重复并集交集差集这个貌似看看参数就明白了   其他扩展都在Enumerable类下面了。   Linq的延迟加载特性   Linq查询的执行结果是IEnumerableT类型而对IEnumerableT在内部C#通过yield关键字实现迭代器达到延迟加载的目的。从而使Linq查询只是在需要的时候才会被执行。   但是某一些扩展方法在执行时会试图遍历整个容器从而使延迟加载无效如排序聚合函数CountSumAverage等。 static IEnumerableint InfinityInts() {int count 0;while (true)yield return count; }public static void LazyLoad() {var query from i in InfinityInts()select i;foreach (var i in query.Take(20)){Console.WriteLine(i);} }public static void CantDoLazyLoad() {var query from i in InfinityInts()select i;foreach (var i in query.OrderBy(i i).Take(20)){Console.WriteLine(i);} } 这里有个简单的例子来证明当使用Take时候Linq语句能正常的执行而当我们再Linq上使用一个Order By之后程序就卡死了当然这是理所应当的在失去延迟加载的特性之后试图对一个无穷序列排序的结果一定是outOfMemory。  转载于:https://www.cnblogs.com/alsf/p/5993432.html
http://www.zqtcl.cn/news/594001/

相关文章:

  • 海山免费网站建设做视频网站如何赚钱
  • 网站增加点击率 怎样做小店面设计装修网
  • 一 美食 视频网站模板下载安装外国优秀网站欣赏
  • 网站服务器部署重庆涪陵网站建设公司
  • php网站开发实践要做网站照片怎么处理
  • 网站短期就业培训班搜集关键词的网站
  • 社区网站开发淘宝网站打算找人做
  • 政务类网站网页管理平台
  • 淘宝联盟微信里做网站花卉市场网站建设基本步骤
  • 做网站广告语网站注册建设
  • 仓山福州网站建设哪个是网站建设里面的
  • 开网站流程开发公司起名
  • 免费建站优化网站基本设置
  • 网站建设需要上传数据库吗seo自己做网站吗
  • 网站制作ppt杭州网站的特点
  • 美丽寮步网站建设价钱杭州网站设计询问蓝韵网络
  • 毕节网站建设公司网站职业技术培训学校
  • 果洛wap网站建设比较好17岁在线观看免费高清完整版
  • 一级a做爰片在线看免播放器网站一个网站突然打不开
  • 聊城网站开发培训wordpress实时预览载入中
  • 网站设计文章国际转运网站建设
  • 南充市建设厅官方网站购物网站设计说明
  • 防疫网站网页设计wordpress不同侧边栏
  • 网站的建设多少钱长春市招标建设信息网
  • 网站加速代码百度浏览器app
  • 关于配色的网站企业宣传册文案范文
  • 免费推广网站教程湖南中核建设工程公司官方网站
  • 莱阳网站建设公司彩票类网站是如何做代理的
  • 食品公司网站建设广州做网站制作公司
  • 网站上传服务器教程搜索网站存在的关键字