linq 语法lambpa语法总结

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 num
16                             where n < 35
17                             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<int> numsel = from n in nums
 6                                       where n < 13
 7                                       select n;//输出:2,6,3
 8 
 9             int numcount = (from n in nums
10                             where n < 13
11                             select n).Count();//输出:3
12 
13             foreach (int item in numsel)
14             {
15                 Response.Write(item+",");
16             }
17             Response.Write(numcount);
18         }
复制代码

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

3.查询表达式的结构 :查询表达式必须以 from 子句开头,并且必须以 select group 子句结尾
子句必须按照一定的顺序出现
① 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<int, bool> myDel = new Func<int, bool>(IsOdd);//委托对象
10             var countOdd = intArray.Count(myDel);
11 
12             Response.Write("countOdd is:" + countOdd);//输出:coountOdd is 4
13         }
复制代码

②  使用匿名方法

复制代码
 1         protected void btnfun_Click(object sender, EventArgs e)
 2         {
 3             //使用匿名方法
 4             int[] intArray = new int[] { 3, 4, 5, 2, 53, 21 };
 5             Func<int, bool> 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 4
12         }
复制代码

③  使用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 4
8         }
复制代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值