C#基础之LINQ查询语句的简单使用(一)

l     对数组查询(排序,查找)

l     对集合查询(排序,分组)

l     多种条件综合使用的简单实例

在不触及数据库的前提下,从一些数据中查询出需要的数据,最简单方便的莫过于LINQ语句,而它的使用,相信只要学习过简单SQL语句的人,都会觉得非常简单,下面笔者列举了最常见的几个LINQ语句查询,而更多的内容,待以后慢慢积累。

1.对数组查询

①对数组降序/升序排列查询       

           int[] nums =new int[] { 2, 54, 4, 6, 7, 882, 4, 6, 53, 3, 1, 5, 6, 7, 8 };

           //升序排列,each代表nums中的每个元素,orderby指明检索语句

           var result = from eachin nums orderby eachselect each;

           Console.WriteLine("升序排列:");

           foreach (int itemin result)

           {

               Console.Write("{0}\t", item);

           }           

           //降序排列

           Console.WriteLine("\r\n降序排列:");

           var result1 = from eachin nums orderby eachdescending select each;

           foreach (int itemin result1)

           {

               Console.Write("{0}\t", item);

           }

           Console.ReadKey();

    如上,简简单单的一句LINQ语句,便快速对数据进行了排列查询,当然要注意该语句改变的结果保存在变量result/result1中,而类型var,是一种‘推断’类型,在不确定类型的时候可以用它来代替,表示由编译器确定和分配最适当的类型。而经过查询的nums数组,其本身的元素排列并未发生改变。

②从数组中找出偶数和奇数并分开列出

             int[] nums =new int[] { 2, 54, 4, 6, 7, 882, 4, 6, 53, 3, 1, 5, 6, 7, 8 };

           //偶数查询 each代表nums中的每个元素,where子句限定检索条件

           var result = from eachin nums where each % 2 == 0select each;

           //奇数查询

           var result1 = from eachin nums where each % 2 != 0select each;

           Console.WriteLine("偶数:");

           foreach (int itemin result)

           {

               Console.Write("{0}\t", item);

           }

           Console.WriteLine("\r\n奇数:");

           foreach (int itemin result1)

           {

               Console.Write("{0}\t", item);

            }

           Console.ReadKey(); 

    

③将字符串数组中的元素按照其首字母不同进行分组列出

  string[] strs = { "jack","tom","alon","shrek","tim","fu","java","sharp","done","ah","son"};

            //re代表strs数组中的元素,group by指定检索条件

           var results = from rein strs group re by re[0];

           foreach (var itemin results)

           {

               Console.WriteLine("首字母以{0}开头的单词有:",item.Key);               

               foreach (var resin item)

               {

                   Console.WriteLine(res);

               }

           }

           Console.ReadKey();    

  如上,在不改变数组的前提下,使用where/group by子句很简单的找出需要的结果,这也进一步证实了LINQ语句与SQL高度的相似性,本质上讲它们所代表的的意思并未改变多少。看到这里如果LINQ语句已经提起了你的兴趣,就赶紧在看完本篇后续内容后打开圣典MSDN学习吧。

 2.对集合查询

有数组的地方不能没有集合,如果之前你一直对集合中的查询排序等赶到头疼,那就看看下面的例子吧。

①添加公司员工的姓名和工资,按工资从高到底排列查询

 在不将数据写入数据库的情况下,我们可以考虑将其写入工资为键,姓名为值的SortedDictionarySortedList集合中,这样集合会自主对键进行排列。当然也可以直接写入Dictionary集合中而后用LINQ语句查询结果,如下例。

           Dictionary<string,int> dic = new Dictionary<string, int>();

           dic.Add("王强", 3500);

           dic.Add("刘菲", 4000);

           dic.Add("吴桐", 4500);

           dic.Add("李茂荣", 2000);

           dic.Add("白翠华", 1000);

           dic.Add("刘忻", 6000);

           //按工资升序

           Console.WriteLine("按工资升序排列:");

           var result = from dsin dic orderby ds.Valueselect ds;

           foreach (KeyValuePair<string,int> kvp in result)

           {

               Console.WriteLine("姓名{0} 工资{1}", kvp.Key, kvp.Value);

           }

           //按工资降序

           Console.WriteLine("\r\n按工资降序排列:");

           var result1 = from dsin dic orderby ds.Valuedescending select ds;

           foreach (KeyValuePair<string,int> kvp in result1)

           {

               Console.WriteLine("姓名{0} 工资{1}", kvp.Key, kvp.Value);

           }

           Console.ReadKey();

如上,我们通过简单的LINQ语句,很快速的对写入的排列混乱的字典集合做出排列查询,下面例子将展示LINQ语句中的group by子句在字典集合中的应用。

  ②以4000元的工资为界,对员工分组

          Dictionary<string,int>dic=newDictionary<string,int> ();         

           dic.Add( "王强",3500);

           dic.Add("刘菲",4000);

           dic.Add( "吴桐",4500);

           dic.Add("李茂荣",2000);

           dic.Add("白翠华",1000);

           dic.Add("刘忻",6000);

           //result中存储的查询结果集,一部分为工资大于等于4000,一部分为工资小于4000

           var result = from dsin dic group ds by ds.Value >= 4000;

           foreach (var itemin result)

           {

              Console.WriteLine(item.Key==true?"工资大于或等于4000的员工":"工资小于4000的员工");

               foreach (var salaryin item)

               {

                   Console.WriteLine("姓名:{0}\t工资:{1}",salary.Key,salary.Value);

               }

           }

           Console.ReadKey();     

 

3.多种条件综合使用的简单实例

   该例引用自MSDN,其中对LINQ语句的使用思维非常值得如笔者这样的初学者学习,我想如果哪天您能轻松自如地写出这样的LINQ语句,那您对LINQ的学习也算是初窥门径。

要求:找出下面几句中单词

 string[] strings =

       {

           "A penny saved is a penny earned.",

           "The early bird catches the worm.",

           "The pen is mightier than the sword."

       };

           //分割句子放入array数组中,检索其中首字母是元音字母的单词,不区分大小写,不重复列出

           // Split the sentence into an array of words

           // and select those whose first letter is a vowel.        

           var earlyBirdQuery =

              (from sentence in strings

               let words = sentence.Split(' ')

               from word in words

               let w = word.ToLower()   //此处替换为let w = word时检索将区分大小写

               where w[0] == 'a' || w[0] == 'e'

                   || w[0] == 'i' || w[0] == 'o'

                   || w[0] == 'u'

               select word).Distinct();         

           foreach (var vin earlyBirdQuery)

           {

               Console.WriteLine("\"{0}\"单词是以元音字母开头", v);

           }          

           Console.ReadKey();

如上,就是一些LINQ语句的简单使用,如果你觉得真得很方便的话,赶紧去学习吧!

如果您对SQL基础语句也感兴趣的话,可以参看本人的另一篇博客。

地址:SQL基础知识

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值