国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-17 03:04:37
字體:
來源:轉載
供稿:網友
linq讀書筆記3-操作符之select與selectmany

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正好可以很聰明的做到將兩個序列分開后組成一個新的序列返回給我們,而這也正是我們需要的結果.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 理塘县| 青州市| 五原县| 兖州市| 当涂县| 宁安市| 巨鹿县| 兴山县| 灯塔市| 九龙县| 黄冈市| 海淀区| 壶关县| 沙湾县| 措勤县| 孝感市| 随州市| 富裕县| 大竹县| 杨浦区| 丽江市| 邹城市| 宁城县| 东安县| 安平县| 正镶白旗| 卢湾区| 新余市| 荆州市| 太康县| 忻城县| 平乐县| 通山县| 吉林市| 武乡县| 常州市| 鹤壁市| 定结县| 吴桥县| 巩义市| 增城市|