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基础知识