您的位置:首页 > 编程语言 > C#

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

2013-11-07 14:52 816 查看
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.对集合查询
有数组的地方不能没有集合,如果之前你一直对集合中的查询排序等赶到头疼,那就看看下面的例子吧。
①添加公司员工的姓名和工资,按工资从高到底排列查询
 在不将数据写入数据库的情况下,我们可以考虑将其写入工资为键,姓名为值的SortedDictionary或SortedList集合中,这样集合会自主对键进行排列。当然也可以直接写入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基础知识
 
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linq C#