【LINQ】Select与SelectMany的区别

Select() 和 SelectMany() 的工作都是依据源值生成一个或多个结果值。
Select() 为每个源值生成一个结果值。因此,总体结果是一个与源集合具有相同元素数目的集合。与之相反,SelectMany() 将生成单一总体结果,其中包含来自每个源值的串联子集合。作为参数传递到 SelectMany() 的转换函数必须为每个源值返回一个可枚举值序列。然后,SelectMany() 将串联这些可枚举序列以创建一个大的序列。

private class NamedEntity
{
    public NamedEntity(int id, string name) { this.ID = id; this.Name = name; }
    public int ID { get; set; }
    public string Name { get; set; }
}

public Window()
{
    InitializeComponent();

    NamedEntity[] list1 = { new NamedEntity(1, "Albert"), new NamedEntity(2, "Burke"), new NamedEntity(3, "Connor") };
    NamedEntity[] list2 = { new NamedEntity(2, "Albert was here"), new NamedEntity(3, "Burke slept late"), new NamedEntity(4, "Happy") };
    IList<NamedEntity[]> l = new List<NamedEntity[]>() { list1, list2 };
    IList<NamedEntity> tokens = l.SelectMany(a => a).ToList();
    var grp = tokens.GroupBy(a => a.ID);
    IList<NamedEntity> result = grp.SelectMany(a => a.Take(1)).ToList();
}

原文地址:https://www.cnblogs.com/chriskwok/p/11609515.html

时间: 2024-10-25 22:18:07

【LINQ】Select与SelectMany的区别的相关文章

Select()和SelectMany()的区别

Select与SelectMany的区别 Select() 和 SelectMany() 的工作都是依据源值生成一个或多个结果值. Select() 为每个源值生成一个结果值.因此,总体结果是一个与源集合具有相同元素数目的集合.与之相反,SelectMany() 将生成单一总体结果,其中包含来自每个源值的串联子集合.作为参数传递到 SelectMany() 的转换函数必须为每个源值返回一个可枚举值序列.然后,SelectMany() 将串联这些可枚举序列以创建一个大的序列. string[] t

Select与SelectMany的区别

Select() 和 SelectMany() 的工作都是依据源值生成一个或多个结果值. Select() 为每个源值生成一个结果值.因此,总体结果是一个与源集合具有相同元素数目的集合.与之相反,SelectMany() 将生成单一总体结果,其中包含来自每个源值的串联子集合.作为参数传递到 SelectMany() 的转换函数必须为每个源值返回一个可枚举值序列.然后,SelectMany() 将串联这些可枚举序列以创建一个大的序列. string[] text ={ "Albert was he

IEnumerable.Select和SelectMany的区别

IEnumerable<T>在Windows Phone 7的程序上很常用,它允许开发人员定义foreach语句功能的实现并支持非泛型方法的简单迭代,下面主要分析一下 IEnumerable<T>.Select和IEnumerable<T>.SelectMany这两个方法的区别. IEnumerable<T>.Select  将序列中的每个元素投影到新表中. IEnumerable<T>.SelectMany 将序列的每个元素投影到 IEnume

linq里的select和selectmany操作

Select() 和 SelectMany() 的工作都是依据源值生成一个或多个结果值.Select() 为每个源值生成一个结果值.因此,总体结果是一个与源集合具有相同元素数目的集合.与之相反,SelectMany() 将生成单一总体结果,其中包含来自每个源值的串联子集合.作为参数传递到 SelectMany() 的转换函数必须为每个源值返回一个可枚举值序列.然后,SelectMany() 将串联这些可枚举序列以创建一个大的序列. 下面两个插图演示了这两个方法的操作之间的概念性区别.在每种情况下

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&g

linq里的select和selectmany操作 投影运算

原文地址:https://msdn.microsoft.com/zh-cn/library/bb546168.aspx#Mtps_DropDownFilterText 投影运算 其他版本 投影是指将对象转换为一种新形式的操作,该形式通常只包含那些将随后使用的属性. 通过使用投影,您可以构建依据每个对象生成的新类型. 您可以映射属性,并对该属性执行数学函数. 还可以在不更改原始对象的情况下映射该对象. 下面一节中列出了执行投影的标准查询运算符方法. 方法 方法名 说明 C# 查询表达式语法 Vis

ef linq select where dynamic singleordefault

singleordefault(where) 条件不支持动态 所以想要达到目标,就需要转换思路,把where在前面调用,然后再接,代码如下 public TResult GetSingle<T, TResult>(Expression<Func<T, bool>> exWhere, Expression<Func<T, TResult>> selector) where T : class { using (SysDb<T> db =

[转]ThinkPHP中实例化对象M()和D()的区别,select和find的区别

1.ThinkPHP中实例化对象M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动调用M方法.通俗一点说:M实例化参数是数据库的表名.D实例化的是你自己在Model文件夹下面建立的模型文件 例如:$user = new UserModel(); 等价于$user = D('user'); 如果实例化的是一个空模型 例如 $Demo = new Model(); 那么它等价于

ThinkPHP中实例化对象M()和D()的区别,select和find的区别

原文:ThinkPHP中实例化对象M()和D()的区别,select和find的区别 1.ThinkPHP中实例化对象M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动调用M方法.通俗一点说:M实例化参数是数据库的表名.D实例化的是你自己在Model文件夹下面建立的模型文件 例如:$user = new UserModel(); 等价于$user = D('user'); 如