日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NET问答:Select 和 SelectMany 的区别

發布時間:2023/12/4 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NET问答:Select 和 SelectMany 的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

咨詢區

  • Tarik

我已經 google 搜索了 Select 和 SelectMany 之間的區別,但我并沒有找到合適的答案,我現在急切的需要知道在 Linq to SQL 時兩者的區別而不是給我用Array展示...

能否有人幫忙提供 Linq To SQL 的例子嗎?

回答區

  • Mike Two

SelectMany 它是對 列表中的列表 進行扁平化查詢,比如下面的例子。

public?class?PhoneNumber {public?string?Number?{?get;?set;?} }public?class?Person {public?IEnumerable<PhoneNumber>?PhoneNumbers?{?get;?set;?}public?string?Name?{?get;?set;?} }IEnumerable<Person>?people?=?new?List<Person>();//?Select?gets?a?list?of?lists?of?phone?numbers IEnumerable<IEnumerable<PhoneNumber>>?phoneLists?=?people.Select(p?=>?p.PhoneNumbers);//?SelectMany?flattens?it?to?just?a?list?of?phone?numbers. IEnumerable<PhoneNumber>?phoneNumbers?=?people.SelectMany(p?=>?p.PhoneNumbers);//?And?to?include?data?from?the?parent?in?the?result:? //?pass?an?expression?to?the?second?parameter?(resultSelector)?in?the?overload: var?directory?=?people.SelectMany(p?=>?p.PhoneNumbers,(parent,?child)?=>?new?{?parent.Name,?child.Number?});
  • Sriwantha Attanayake

SelectMany 類似 Sql 中的 cross join ,也就是所謂的笛卡爾積,比如下面的例子。

Set?A={a,b,c} Set?B={x,y}

SelectMany 之后會得到如下結果。

{?(x,a)?,?(x,b)?,?(x,c)?,?(y,a)?,?(y,b)?,?(y,c)?}

可以看出,上面就是羅列了 SetA 和 SetB 的所有組合,轉換成 linq 的話可以這么寫。

List<string>?animals?=?new?List<string>()?{?"cat",?"dog",?"donkey"?}; List<int>?number?=?new?List<int>()?{?10,?20?};var?mix?=?number.SelectMany(num?=>?animals,?(n,?a)?=>?new?{?n,?a?});

輸出結果如下:

{(10,cat),?(10,dog),?(10,donkey),?(20,cat),?(20,dog),?(20,donkey)}
  • AlejandroR

var?players?=?db.SoccerTeams.Where(c?=>?c.Country?==?"Spain").SelectMany(c?=>?c.players);foreach(var?player?in?players) {Console.WriteLine(player.LastName); }
  • De Gea

  • Alba

  • Costa

  • Villa

  • Busquets

  • 點評區

    很多時候,我發現越解釋概念越說不清楚,最后說著說著就把 理科 變成了 文科,把邏輯變成了硬記????????????,我覺得這時候啥也不要說,直接看源碼反而讓人更清楚是咋回事。。。

    • Select 的底層邏輯

    //?System.Linq.Enumerable using?System.Collections.Generic;private?static?IEnumerable<TResult>?SelectIterator<TSource,?TResult>(IEnumerable<TSource>?source,?Func<TSource,?int,?TResult>?selector) {int?index?=?-1;foreach?(TSource?item?in?source){index?=?checked(index?+?1);yield?return?selector(item,?index);} }
    • SelectMany 的底層邏輯

    //?System.Linq.Enumerable using?System.Collections.Generic;private?static?IEnumerable<TResult>?SelectManyIterator<TSource,?TCollection,?TResult>(IEnumerable<TSource>?source,?Func<TSource,?IEnumerable<TCollection>>?collectionSelector,?Func<TSource,?TCollection,?TResult>?resultSelector) {foreach?(TSource?element?in?source){foreach?(TCollection?item?in?collectionSelector(element)){yield?return?resultSelector(element,?item);}} }

    不知道你是否 豁然開朗, 不明白的話,快用 ILSpy 去挖掘 Enumerable 吧!

    原文鏈接:https://stackoverflow.com/questions/958949/difference-between-select-and-selectmany

    總結

    以上是生活随笔為你收集整理的NET问答:Select 和 SelectMany 的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。