1. 程式人生 > >LinQ—基本查詢操作符 Select/Where/Group語句

LinQ—基本查詢操作符 Select/Where/Group語句

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是一個判斷條件
3)Group                                                                                               語法:
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();
            }

顯示效果:


舉得例子也只是一些常用的查詢語句,其他的在繼續學習中!