LINQ(Language Integrated Query)即語言集成查詢。它是一種語言特性和API,使得你可以使用統一的方式編寫各種查詢,查詢的對象包括xml、對象集合、SqlServer數據庫等。
1、LINQ To Object 負責對象的查詢
2、LINQ To XML 負責對XML的查詢
3、LINQ To ADO.NET 負責數據庫的查詢
查詢例如:
int[] numbers=new int[]{1,2,7,9,3,6}
List<int> array=new List<int>();
foreach(int temp in numbers)
{
if(temp%2==0)
{
array.Add(temp);
}
}
LINQ 查詢:
int[] numbers=new int[]{1,3,5,9,2,7}
var even=numbers.where(p=>p%2==0).select(p=>p).OrderBy Descending(p=>p);//從數組中提取偶數並降序排列
even.sort();//升序
even.Reverse();//降序
Lambda表達式的進化:
C# 1.0 委托
C# 20 匿名方法
C# 3.0 Lambda表達式
委托:
delegate string ProcessString(string input);
ProcessString p=new ProcessString(Lowerlt);
foreach(string name in FoxRive)
{
console.WriteLine(p(name));
}
Private string Lowerlt(string input)
{
return input.ToLower();
}
匿名方法:
ProcessString p=new ProcessString(string input)
{
return input.ToLower();
}
foreach(string name in FoxRive)
{
console.WriteLine(p(name));
}
Lambda表達式:
ProcessString p=input=>input.ToLower();
foreach(string name in FoxRive)
{
console.WriteLine(p(name));
}
查詢語句示例:
示例一:
int[] numbers=new int[]{6,4,3,2,1,9,7,8,5}
var even=numbers.where(p=>p%2==0)
.select(p=>{console.write(p.tostring())}); return p;)
foreach(var item in even)
{
console.writeline(item);
}
示例二:
int[] numbers=new int[]{6,4,3,2,1,9,7,8,5}
var even=from number in numbers
where number%2==0)
.orderby number descending select number;
foreach(var item in even)
{
console.writeline(item);
}
復雜查詢語句示例:
List<Person> p=GetFoxRiver();
var q=from a in p where a.Age<30 && a.FristName.Length=7
orderby a.Age DEscending
select new {Name=a.FristName+""+a.LastName,Age=a.Age};
foreach(var item in even)
{
console.writeline(item.Name+""+item.Age);
}
聚合類
int[] array=new int[]{1,3,7,9,2,14}
console.writeline("Max:{0}",array.Max());//返回最大值
console.writeline("Min:{0}",array.Min());//返回最小值
console.writeline("Average:{0}",array.Average());//返回平均值
var result=(from p in array where p.Startswith(',') select p).count();
console.writeline("count:{0}",result);//返回數組中總共幾個數
分區類
var result=array.Take(3);//從序列開頭返回指定數量,連續元素
結果:1,3,7
var result=array.Takewhere(p=>p%2==0);//滿足條件就返回元素,不滿足就不返回
結果:2,14
var result=array.where(p=>p%2==0).Take(1);//
結果:2
var result=array.skip(2);//跳出序列中指定數量的元素返回剩余值元素
結果:3,7,9,2,14
var result=array.skipwhere(p=>p》3);//
結果:7,9,2,14
集合類
var result=array.Distirot();//返回序列中非重復元素
生成類:
var result=Enumerable.Repeat("a",10).tolist();//生成包含一個重復值的序列
var result=Enumerable.Range(2,10).tolist();//生成一個指定范圍內的序列
