LinQ—基本查詢操作符 Select/Where/Group語句
阿新 • • 發佈:2019-02-07
LinQ中的基本查詢操作和SQL中的功能是一樣的,對於其異同點,我們來了解了解:
1)Select
語法:
<span style="font-family:SimHei;font-size:18px;"> public static IEnumerable<TResult> Select<TSource,TResult>(
this IEnumerable<TSource>source,Func<TSource,TResult>selector)</span>
說明:
- Select方法本身是一個泛型集合擴充套件方法
- 它作用於IEnumerable<TSource>型別
- 它只接受一個Func<TSource,TResult>型別引數
- Func<TSource,TResult>是一個泛型委託,位於System名字空間下,System Core dll中,在這裡selector是一個提取器。
2)Where
語法:
<span style="font-family:SimHei;font-size:18px;">public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource>source,Func<TSource,bool>predicate)</span>
說明:
- Where方法也是一個泛型擴充套件方法
- 它和Select()一樣作用於IEnumerable<TSource>型別
- 它只接受一個Func<TSource,bool>泛型委託引數
- 在這裡predicate是一個判斷條件
public static IEnumerable<IGrouping<TKey.TSource>>GroupBy<TSource.TKey>
(this IEnumerable<TSource>source,Func<TSource,TKey>keySelector)<span style="font-family: SimHei; background-color: rgb(255, 255, 255);"> </span>
4)舉例:
首先我們來寫一個擴充套件類,為IEnumerablet<string>提供輸出的方法
<span style="font-family:SimHei;font-size:18px;"> //擴充套件類,只要是靜態就可以
public static class ExtraClass
{
//為IEnumerablet<string>提供輸出的方法
public static void Print(this IEnumerable<string> ie)
{
//獲取可遍歷的介面
IEnumerator<string> result = ie.GetEnumerator();
Console.WriteLine("\n-------------------------------------\n");
while (result.MoveNext())
{
Console.WriteLine(result.Current);
}
Console.WriteLine("\n---------------------------------------\n");
}
}</span>
寫一個泛型集合,為其存放幾條資料:<span style="font-family:SimHei;font-size:18px;"> private void BtnSelect_Click(object sender, EventArgs e)
{
//LinQ to Objects
//泛型集合資料persons
List<string> persons = new List<string>();
persons.Add("li si");
persons.Add("meng meng");
persons.Add("huo huo");
persons.Add("niu nan");
persons.Add("hu hu");
persons.Add("tu zi");
persons.Add("huo er");
persons.Add("huo xu");</span>
這樣我們就可以根據選擇來顯示輸出結果:
1、輸出person中所有元素:
<span style="font-family:SimHei;font-size:18px;"> //輸出person中所有的元素
var result=persons.Select(p => p);</span>
顯示結果:
2、輸出person中姓huo的(以下三種語句都顯示同樣的效果)
<span style="font-family:SimHei;font-size:18px;"> //輸出person中姓huo的(以下三種語句都必答同樣的效果)
//var result=persons.Where(p=>p.StartsWith("huo"));
//var result = persons.Select(p=>p).Where(p => p.StartsWith("huo"));
//var result = persons.Where(p => p.StartsWith("huo")).Select(p=>p);</span>
顯示的效果:
當然,也可以直接使用Where,利用bool委託引數來執行,
<span style="font-family:SimHei;font-size:18px;"> var result=persons.Where(p=>Judge(p));
result.Print();
}
public bool Judge(string s)
{
if (s.StartsWith("huo"))
{
return true;
}
else
{
return false;
}
}</span>
顯示效果一樣,但是卻直接顯示了Where()語句的用法
對於Group的使用,我們可以使用其實現按照姓氏來顯示名字如下:
//按照姓名來分組-取出姓名中的空格前的部分
var result=persons.GroupBy(p=>p.Split(new char[]{' '})[0]);
foreach (var group in result) //迴圈姓氏顯示出來
{
Console.WriteLine("姓:" + group.Key);
foreach (var name in group) //根據姓氏顯示所對應的名字
{
Console.WriteLine("\t" + name); //格式調整
}
Console.WriteLine();
}
顯示效果:
舉得例子也只是一些常用的查詢語句,其他的在繼續學習中!