Lambda表达式和LINQ

 LINQ

var customers=new[]{

new {name="张三",Discount=4.5},

new {name="张四",Discount=3.5},

new {name="张五",Discount=2.5}

}

var query=form c in customers where c.discount>3 

orderby c.discount

select new {c.Name,Perc=C.discount/100}//构造新对象

foreach (var x in query)

{

console.writeline(x);
}

  查询表达式以frome关键字开始,以select或者group关键字结束,其中,from关键字表明了LINQ将操作u影那个对象

     编译器会将查询表达式语句自动翻译成下面的等价语句

var query=customers.where(c=>c.discount>3)
.orderby(c=>c.discount)
.select(c=>new{c.Name,perc=c.dicount/100})

  Lamebda表达式

using System;
using System.Linq;

namespace ConsoleApplication3
{
    class Program
    {
         static void Main(string[] args)
        {
            int[] intary = { 1,  2, 3, 4, 5, 6, 7, 8, 89, 10 };
            //查询所有能被2整除的元素
            var  query1 = intary.Where(num => num % 2 == 0);
             Console.WriteLine("Query1:");
            foreach (var item in  query1)
            {
                Console.WriteLine("{0}",  item);
            }

            //查询所有值大于3被索引的元素
            var query2 = intary.Where((num,  index) => num > index * 3);
             Console.WriteLine("Query2:");
            foreach (var item in  query2)
            {
                Console.WriteLine("{0}",  item);
            }
        }
    }
}

  还有

  //对所有元素按照%10进行降序排列
            var query2 =  intary.OrderByDescending(val => val % 10);

  int[] intary = { 1, -2, 3, -4, 5, -6, 7, -8, 9, -10  };
            var query1 = intary.OrderBy(val => val);



  int[] intary = { 1, -2, 3, -4, 5, -6, 7, -8, 9, -10  };

   //跳过intAry中小于5的元素
            var query2 =  intary.SkipWhile(num => num < 5);



       int[] intary = { 1,  2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 40 };
             //取intAry中前3个元素
            var query1 = intary.Take(3);



用Distinct()消除集合中相等的元素

  int[] intary = {  1,1, 2,2, 3, 3, 4, 5};
            var query1 =  intary.Distinct();

  用Concat()连接两个集合

using System;
using System.Linq;

namespace ConsoleApplication3
{
    class Program
    {
         static void Main(string[] args)
        {
            string[] strAry1 =  {"Kevin","James","Ben"};
            string[] strAry2 = {  "Ken","Joanna","cc"};
            var query1 =  strAry1.Concat(strAry2);
             Console.WriteLine("Query1");
            foreach (var item in  query1)
            {
                 Console.WriteLine(item);
            }

            var query2 = strAry2.Concat(strAry1);
             Console.WriteLine("Query2");
            foreach (var item in  query2)
            {
                 Console.WriteLine(item);
            }
        }
    }
}

  注意:Concat()方法是直接将两个集合中的元素连接在一起,不会进行重新排序、过滤等,就算两个集合中元素有重复也同样保留。

集合操作

说到集合,很容易想起并集、交集、差集3种常用操作。在LINQ中,IEnumerable<T>类分别通过Union()、Intersect()、Except完成这3种操作()。

using System.Linq;

namespace ConsoleApplication3
{
    class Program
    {
         static void Main(string[] args)
        {
            int[] intAry1 =  {1,2,3};
            int[] intAry2 = {3,4,5};
            var query1 =  intAry1.Union(intAry2);
            Console.WriteLine("并集");
             foreach (var item in query1)
            {
                 Console.WriteLine(item);
            }

            var query2 = intAry1.Intersect(intAry2);
             Console.WriteLine("交集");
            foreach (var item in  query2)
            {
                 Console.WriteLine(item);
            }
}

  

posted @ 2014-07-08 15:22  8932809  阅读(171)  评论(0)    收藏  举报