程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> linq讀書筆記3-操作符之select與selectmany

linq讀書筆記3-操作符之select與selectmany

編輯:C#入門知識

linq對數據的查詢方式的表達形式主要有兩種:

var demo =from p in pList

      where p.id=***

                select p;

var demo =pList.where(p=>p.id=***) select p;

以上是linq最近常見的兩種表達形式。linq支持多種操作符的操作,下面對主要的常操作符進行說明:

select 與selectmany

select操作符聲明:

public static IEnumerable<s> select<T,S>{

  this IEnumerable<T> source,

     Func<T,S> selector

}

select 操作符將根據selector函數對源序列中的每個元素進行求值運算並依次返回該值,構成返回值序列.

舉個簡單例子:

var book= books.Select(p=>p.Name); 

以上的select子句就該一個book對象序列投影到了一個字符串的對象序列,當然可以有更復雜的應用如把序列投影到一個對象等,如以下代碼就是從book集合中找出publisher對象,就將序列投影到一個具體的對象上。

var publisher=from p in books

      select p.publisher

在select 返回的結果集中,其中的對象即可以是原來的對象,也可以是包含若干字段的一個新對象。

如下例:

var Books=from book in sampleBookData.Books

      select new{book.title,book.price,book.publisher.Name};

也可以寫成如下形式:

var Books=from book in sampleBookData.Books

      select new{

             Title=book.title,

             Price=book.price,

            publisherName=book.publisher.Name

            };

 

此類操作創建出一個原數據的一個投影,也是將此類操作歸類為投影的一個重要的原因。

下面來看另一個投影操作:selectmany

操作符聲明:

public static IEnumerable<s> select<T,S>{

  this IEnumerable<T> source,

     Func<T,IEnumerable<s>> selector

}

與select  不同 的是selectmany返回的是一個序列.

selectmany與select 不同的是它會把返回序列集合中的各個元素連接起來形成一個新的序列

具體先來比較兩段代碼:

var tmp=sampleBook.select(p=>p.books.author);

foreach(var item in tmp)

{

    foreach(var item1 in item.author)

  {

     console.writeline(item1.name);

      }

}

以上代碼即我們要實現查詢所有圖書中的作者的信息,book對象的author屬性是由author對象來組成的,所以select的的操作返回了由這些對像數組組成的對像序列,即返回了book與author,book包含了author的對像序列

下面來看selectMany的代碼

 

var tmp=sampleBook.selectmany(p=>p.books.author);

foreach(var item in tmp)

{

  console.writeline(item.Name);

}

可以明顯看出來,selectmany的代碼明顯簡潔了很多,我們需要的是作者的信息,並不需要返回全部的序列信息,而selectmany正好可以很聰明的做到將兩個序列分開後組成一個新的序列返回給我們,而這也正是我們需要的結果.

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved