linq 语法lambpa语法总结
发布日期:2021-10-02 00:05:45 浏览次数:1 分类:技术文章

本文共 4724 字,大约阅读时间需要 15 分钟。

linq表达式可以从数据源(这里好似一个int[])中,按照一定条件(where语句指定)检索数据,生成一个新的序列,但是不改变单个元素。然后可以根据各种方式对返回的序列进行排序或者分组

1、查询语法与方法语法:

① 查询语法(query syntax)是声明形式的,看上去和SQL语句很相似。查询语法使用查询表达式形式书写。
② 方法语法(method syntax)是命令形式的,它使用的是标准的方法调用。方法是一组叫做标准查询运算符的方法。
③ 在一个查询中也可以组合两种形式。

例子:

1         protected void btnSel_Click(object sender, EventArgs e) 2         { 3             int[] num = { 2, 5, 34, 66, 96, 80, 13 }; 4             //查询语法 5              6             var numsel = from n in num 7                          where n < 35 8                          select n; 9             10 11             //方法语法12             //var numsel = num.Where(x=>x<35);13 14             //两种形式的结合  linq表达式可以查询关于数据源信息的单一的值 下面得到大于35的分数的数量15             int numcount = (from n in num16                             where n < 3517                             select n).Count();18 19 20             foreach (var item in numsel)21             {22                 Response.Write(item+"  ");23             }24 25             Response.Write(numcount);26         }

  linq表达式可以对查询的数据进行加工封装或者转换成新的类型。例如上面的例子我们只是返回了一个int集合,如果没有上下文信息我们很难分辨这个结果表示什么,利用linq表达式的Select子句可以将查询记过格式化成String类型的描述信息的集合。我们甚至可以从一条记录中检索特定的信息然后构建一个新的对象类型

      var numsel = from n in num where n<35 select

string.Format("数字:{0}",n)

2、查询变量

①创建int数组。
②返回一个IEnumerable对象,它可以用来枚举查询结果。
③执行一个查询,然后调用一个方法(Count)来返回从查询返回的项的总数。

 

1         protected void btnCh_Click(object sender, EventArgs e) 2         { 3             int[] nums = { 2, 6, 3, 17 }; 4             //返回枚举数 5             IEnumerable
numsel = from n in nums 6 where n < 13 7 select n;//输出:2,6,3 8 9 int numcount = (from n in nums10 where n < 1311 select n).Count();//输出:312 13 foreach (int item in numsel)14 {15 Response.Write(item+",");16 }17 Response.Write(numcount);18 }

PS:有必要用枚举么?觉得还是1中的直接用方便。

3.查询表达式的结构 :查询表达式必须以 子句开头,并且必须以 或 子句结尾

子句必须按照一定的顺序出现
① from子句和select...group子句这两部分是必须的。
② 其他子句是可选的。

 

from

 

查询体

from…

let…

where…

(可选)

 

order by…

(可选)

select…

group…

Into

(可选)

PS:不常用就没怎么总结了。

4.利用orderby可以对数字进行排序;

例如:

1         protected void btnpx_Click(object sender, EventArgs e) 2         { 3             int[] nums = { 3, 15, 67, 72, 21, 34, 21, 6 }; 4             var numsel = from n in nums 5                          orderby n 6                          //where n<50 7                          select n;//输出:3,6,15,21,21,34,67,72,  8             foreach (var item in numsel) 9             {10                 Response.Write(item+",");11             }12         }

PS:如果用来替换冒泡排序不是挺好!

5.lambda表达式

  第一行演示了被赋值给变量del的匿名方法。

  第三行演示了被转换成lambda表达式后的相同的匿名方法

1         delegate double MyDel(int par); 2         protected void btnlam_Click(object sender, EventArgs e) 3         { 4             MyDel del = delegate(int x) { return x + 1; };//匿名方法 5  6             MyDel le1 = (int x) => { return x + 1; };//lambda表达式 7             MyDel le2 = (x) => { return x+1; }; 8             MyDel le3 = x => { return x + 1; }; 9             MyDel le4 = x => x + 1;10             Response.Write(del(5));11             Response.Write(le1(5));12             Response.Write(le2(5));13             Response.Write(le3(5));14             Response.Write(le4(5));15         }

6.lambda表达式的优越性

例子:计算数组中奇数的数量

①  使用委托

1         static bool IsOdd(int x)//委托对象使用方法 2         { 3             return x % 2 == 1;//如果是x奇数,返回true 4         } 5         protected void btndelegate_Click(object sender, EventArgs e) 6         { 7             //使用委托 8             int[] intArray = new int[] { 3, 4, 5, 2, 53, 21 }; 9             Func
myDel = new Func
(IsOdd);//委托对象10 var countOdd = intArray.Count(myDel);11 12 Response.Write("countOdd is:" + countOdd);//输出:coountOdd is 413 }

②  使用匿名方法

1         protected void btnfun_Click(object sender, EventArgs e) 2         { 3             //使用匿名方法 4             int[] intArray = new int[] { 3, 4, 5, 2, 53, 21 }; 5             Func
myDel = delegate(int x) 6 { 7 return x % 2 == 1; 8 }; 9 var countOdd = intArray.Count(myDel);10 11 Response.Write("countOdd is:" + countOdd);//输出:coountOdd is 412 }

③  使用lambda表达式

1         protected void btnlambda_Click(object sender, EventArgs e)2         {3             //使用lambda表达式4             int[] intArray = new int[] { 3, 4, 5, 2, 53, 21 };5             var countOdd = intArray.Count(x => x % 2==1);//lambda表达式6 7             Response.Write("countOdd is:" + countOdd);//输出:coountOdd is 48         }

转载地址:https://blog.csdn.net/jacky_zh/article/details/39925317 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:chrome的常用扩展
下一篇:UserControl中的tagprefix和tagname

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月03日 05时18分30秒