C#中Linq的使用

相信Linq对于大家来说都不陌生,但真正的把它用的恰到好处还是需要努力去搞明白它里面各个方法的使用;Linq它可以实现的功能很多,甚至几句代码可以实现ADO.NET几十行代码的功能,这就Linq带给我们开发人员的好处,而且Linq在程序中的应用非常广泛,可以处理各种数据源的各种需求;

案例如下:

(1)使用普通的Linq方法进行一个数据的查询

            int[] numbers = { 1, 2, 3, 5, 6, 9, 10 };
            //1.普通Linq语法
            var numQuery = from num in numbers// from 参数 in 数据集
                           where num % 2 == 0 // where 条件
                           select num;        // select 参数
foreach (var item in numQuery)
            {
                Console.Write(item + "-");
            }

 (2)使用方法进行Linq的查询

            var numWhere = numbers.Where(n => n % 2 == 0).OrderByDescending(a => a);//数据集.Where(传入Lamda表达式)
  foreach (var item in numWhere)
            {
                Console.WriteLine(item + "-");
            }

 以上的两个方法实现的是同一个效果,除了第二个加了排序之外。

 

(3)Linq的推迟执行和强制执行;在写好的linq语句中暂时不会执行,等要得到结果的时候才会执行

        /// <summary>
        /// Linq的推迟执行和强制执行   在写好的linq语句中暂时不会执行,等要得到结果的时候才会执行
        /// </summary>
        private static void Querysyntax()
        {
            //1.数据源
            int[] numbers = {0,1,2,3,4,5,6,7};

            //2.Query语句创建
            var numQuery = from num in numbers
                           where num % 2 == 0
                           select num;

            int numcount = numQuery.Count();//此时会强制执行第二步
            numQuery.ToArray();             //此时会强制执行第二步
            numQuery.ToList();              //此时会强制执行第二步


            //3.Query使用
            foreach (var item in numQuery)  //在使用numQuery的时候才会执行第二步  叫作推迟执行
            {
                Console.Write("{0,1} ",item);
            }
        }

 (4)对数据进行条件筛选并排序

            int[] numbers = {0,1,2,3,4,5,6,7 };
            var Query = from num in numbers
                        where num % 2 == 1 && num % 3 == 1  //条件
                        orderby num descending              //排序
                        select num;
            foreach (var item in Query)
            {
                Console.WriteLine("{0} ",item);
            }

 (5)Linq中Let关键字的使用

            string[] str = {"Hello world.","this is Friday!"," Are you happay?",""};

            var strQuery = from s in str
                           let words = s.Split(' ')//存储子表达式的一个变量(中间变量) words
                           from word in words
                           let w = word.ToUpper()  
                           select w;
            foreach (var item in strQuery)
            {
                Console.WriteLine("{0} ",item);
            }

 (6)Linq中Join in 的使用

    class Customer
    {
        public string Name{get;set;}
        public string City { get; set; }
    }

    class Employee
    {
        public string Name { get; set; }
        public int Id { get; set; }
    }


            List<Customer> list = new List<Customer>();
            list.Add(new Customer() { Name = "jack", City = "bj" });
            list.Add(new Customer() { Name = "lucy", City = "bj" });
            list.Add(new Customer() { Name = "andy", City = "sh" });

            var QueryCustom = from cus in list
                                        group cus by cus.City;   
            //Linq中Group by的使用方法   一个city内的所有数据存在一个对象里面

            foreach (var item in QueryCustom)
            {
                Console.Write(item.Key);//找出结果中的主键
                foreach (var c in item)
                {
                    Console.WriteLine(" {0}", c.Name);
                }
            }

            var QueryCustom1 = from cus in list
                               group cus by cus.City into cusGroup 
                               where cusGroup.Count() >= 2 //对新结果进行条件筛选
                               select new { city = cusGroup.Key, number = cusGroup.Count()};
                               //对最终结果声明一个新对象
            foreach (var item in QueryCustom1)
            {
                Console.WriteLine("城市:{0},数量:{1}", item.city, item.number);
            }


            List<Employee> listEmp = new List<Employee>();
            listEmp.Add(new Employee() { Name = "jack", Id = 123 });
            listEmp.Add(new Employee() { Name = "lucys", Id = 124 });
            listEmp.Add(new Employee() { Name = "andy", Id = 125 });
            var QueryJoin = from c in list
                            join e in listEmp on c.Name equals e.Name     //join  in 数据集 on 连接条件  连接两个表
                            select new { PersonName = c.Name, PersonId = e.Id, PersonCity = c.City };            //将查询结果放在新对象里面
            foreach (var item in QueryJoin)
            {
                Console.WriteLine("ID:{0}  姓名:{1} 城市:{2}", item.PersonId,   item.PersonName, item.PersonCity);
            }

 至此,Linq的几个简单方法的使用先介绍到这里。

 

posted @ 2016-08-04 00:26  微笑代表淡定.Net  阅读(135)  评论(0)    收藏  举报