NET问答:Select 和 SelectMany 的区别

咨询区

  • Tarik

我已经 google 搜索了 SelectSelectMany 之间的区别,但我并没有找到合适的答案,我现在急切的需要知道在 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);
}
  1. De Gea

  2. Alba

  3. Costa

  4. Villa

  5. 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最好的FLV视频下载器 维棠 (支持优酷视频下载、土豆视频下载等)

维棠FLV视频下载能帮助你轻松下载国内外大多数FLV视频分享网站的视频内容;并且维棠FLV视频下载具有断点续传功能。 现在国内外出现了很多视频分享网站&#xff0c;每个用户都可以把自己的视频节目和其他人分享。这些网站有大量的在线视频资源&#xff0c;但是由于网络带宽的限…

linux ns3配置环境,Ubuntu下的NS3安装与入门

NS3的开发旨在为网络研究和教育提供开放&#xff0c;可扩展的网络仿真平台。简而言之&#xff0c;NS3提供了分组数据网络如何工作和执行的模型&#xff0c;并为用户提供了进行模拟实验的模拟引擎。使用ns-3的一些原因包括进行更难或不可能用真实系统执行的研究&#xff0c;在高…

龙芯3A5000完成流片 同主频性能追平AMD Zen1

前不久&#xff0c;龙芯3A5000完成流片&#xff0c;该CPU基于龙芯自主定义指令集LoongArch。据小道消息&#xff0c;SPEC06测试定点26分&#xff08;base 2.5Ghz&#xff09;。这个成绩已经达到预期指标&#xff0c;而且经过进一步优化&#xff0c;SPEC06成绩还有进一步优化的…

熬夜族又一噩耗:“早死”风险更高!

根据美国西北大学范伯格医学院和英国萨里大学最近的一项研究&#xff0c;相比于早睡早起的人&#xff08;百灵鸟一般&#xff09;&#xff0c;晚上不睡、早晨不起&#xff0c;或起床困难的“夜猫子”们&#xff0c;“早死”的风险更高。这项基于英国生物库中将近50万人样本的研…

iNeuOS工业互联平台,生产过程业务联动控制

1. 概述工业物联网也好、工业互联网也好或是其他生产系统&#xff0c;反向控制始终无法回避。搞工业最直接、最体现效果的两个方面是采集各种数据和生产过程业务控制&#xff0c;所谓大数据预测和分析&#xff0c;那是仁者见仁、智者见智&#xff0c;下一篇文章我们会专业来讨…

如何使用 BenchmarkDotNet 对 C# 代码进行基准测试

BenchmarkDotNet 是一个轻量级&#xff0c;开源的&#xff0c;强大的 .NET 工具包&#xff0c;它可以将你的方法转化为基准并跟踪这些方法&#xff0c;最后对这些方法的性能提供一些测试报告&#xff0c;使用 BenchmarkDotNet 玩 基准测试 是非常容易的。你可以利用 BenchmarkD…

原来论文排版还有这样的学问

论文的重要加分点除了内容&#xff0c;还有它小天最近经常遇到小伙伴的诉苦&#xff1a;“我的毕业论文提交一次就被导师批评一次&#xff0c;内容不行就算了&#xff0c;格式也有问题&#xff01;改论文改到绝望”“期刊的版式要求不是统一的&#xff0c;为了多投几家&#xf…

红帽linux5安装Oracle 9i enterprise

红帽linux5安装Oracle 9i enterprise 本文转自&#xff1a;http://database.51cto.com/art/201004/194082.htm摘要&#xff1a;如果你在红帽Linux5上安装Oracle 9i enterprise遇到了问题&#xff0c;不防看一看下面的文章&#xff0c;希望能帮你解决有关Oracle9i实际应用的问题…

神经网络告诉我,谁是世界上最「美」的人?

「魔镜魔镜告诉我&#xff0c;谁是世界上最美的女人&#xff1f;」这句伴随童年的话也有现实版哦&#xff5e;神经网络可以预测人脸颜值&#xff0c;这方面也出现了不少研究。今年年初华南理工大学的研究者发布论文&#xff0c;并公开了数据集 SCUT-FBP5500。本文作者 Dima Shu…

开源推荐:.Net Core3.1 + EF Core + LayUI 封装的MVC版后台管理系统

ASP.NET Core是一个由微软创建的&#xff0c;用于构建Web应用程序&#xff0c;API&#xff0c;微服务的Web框架。它使用常见的模式&#xff0c;例如MVC&#xff08;模型-视图-控制器&#xff09;&#xff0c;依赖注入&#xff0c;和一个由中间件构成它基于Apache 2.0许可开放源…

android中文api(85)——HorizontalScrollView

前言 本章内容是android.widget.HorizontalScrollView&#xff0c;译为"横向滚动条"&#xff0c;版本为Android 2.3 r1&#xff0c;翻译来自"Tina"&#xff0c;感谢"Tina"为大家带来精彩的翻译稿 &#xff01;期待你加入Android API 中文的翻译&…

如何在 C# 中使用只读的 Collections

集合 表示一组可用于获取和存储的对象&#xff0c;在 C# 中提供了两种类型的集合。普通集合泛型集合前者存在于 System.Collections 命名空间下&#xff0c;属类型不安全的&#xff0c;后者存在于 System.Collections.Generic 命名空间下&#xff0c;属类型安全的。不可变对象 …

操作系统和数据库的知识梳理(思维导图)

使用思维导图工具 freemind 提供下载 源码文件和 Java网页版 http://files.cnblogs.com/facingwaller/osanddb.rar

令人难以理解的软件工程师:几千行代码能搞定的为什么要写几万行?

一我们公司的 Windows 版软体已经有十多年的历史&#xff0c;经过历代工程师的整治之后&#xff0c;内容已经凌乱不堪。过去三个月&#xff0c;我找时间自己重写了整个主程序。原本数万行的程序&#xff0c;被我重写的只剩下数千行&#xff0c;功能不变&#xff0c;效能更好&am…

如何从 dump 文件中提取出 C# 源代码?

一&#xff1a;背景 相信有很多朋友在遇到应用程序各种奇葩问题后&#xff0c;拿下来一个dump文件&#xff0c;辛辛苦苦分析了大半天&#xff0c;终于在某一个线程的调用栈上找到了一个可疑的方法&#xff0c;但 windbg 常常是以 汇编 的方式显示方法代码的&#xff0c;可惜的是…

谈谈对IOC及DI的理解与思考

一、前言在实际的开发过程中&#xff0c;我们经常会遇到这样的情况&#xff0c;在进行调试分析问题的时候&#xff0c;经常需要记录日志信息&#xff0c;这时可以采用输出到控制台。因此&#xff0c;我们通常会定义一个日志类&#xff0c;来实现输出日志。定义一个生成验证的逻…

终于有人把云计算、大数据和人工智能讲明白了!

今天跟大家讲讲云计算、大数据和人工智能。为什么讲这三个东西呢&#xff1f;因为这三个东西现在非常火&#xff0c;并且它们之间好像互相有关系&#xff1a;一般谈云计算的时候会提到大数据、谈人工智能的时候会提大数据、谈人工智能的时候会提云计算……感觉三者之间相辅相成…

聊一聊如何在.NET Core中使用Nacos 2.0

前言 随着 nacos 2.0.0 正式发布&#xff0c;老黄这边也跟着发布了 1.0.2 版本的 nacos-sdk-csharp。下面简单聊一下相关的使用。纯 SDK 的使用 首先要安装 nuget 包<PackageReference Include"nacos-sdk-csharp" Version"1.0.2" />这里有一点要注意…

听说你刚转了Java?准备转回.NET吧!

牛年跳槽季如火如荼&#xff0c;敏锐点的小伙伴儿应该都留意到了&#xff0c;BAT新年都在招聘.NET。2020年11月份发布.NET5统一了七大应用方向&#xff0c;.NET6的2个预览版已经把Blazor升级、跨平台UI方案MAUI、CLR性能优化等都放出来了&#xff0c;.NET前景充满想象&#xff…

一个人开始废掉的3种迹象

1作家李尚龙说&#xff1a;“在大城市里&#xff0c;搞废一个人的方式特别简单。给你一个安静狭小的空间&#xff0c;给你一根网线&#xff0c;最好再加一个外卖电话。好了&#xff0c;你开始废了。”之前的我并不相信人会这么轻易地堕落&#xff0c;直到身边出现了一个真实的例…