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:
De Gea
Alba
Costa
Villa
Busquets
点评区
很多时候,我发现越解释概念越说不清楚,最后说着说着就把 理科 变成了 文科,把逻辑变成了硬记????????????,我觉得这时候啥也不要说,直接看源码反而让人更清楚是咋回事。。。
Select 的底层逻辑
SelectMany 的底层逻辑
不知道你是否 豁然开朗, 不明白的话,快用 ILSpy 去挖掘 Enumerable 吧!
原文链接:https://stackoverflow.com/questions/958949/difference-between-select-and-selectmany
总结
以上是生活随笔为你收集整理的NET问答:Select 和 SelectMany 的区别的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 一日一技:ASP.NET Core 判断
- 下一篇: 龙芯3A5000完成流片 同主频性能追平