zoukankan      html  css  js  c++  java
  • .NET LINQ 投影运算

     

    • 投影运算
         投影是指将对象转换为一种新形式的操作,该形式通常只包含那些将随后使用的属性。 通过使用投影,您可以构建依据每个对象生成的新类型。 您可以映射属性,并对该属性执行数学函数。 还可以在不更改原始对象的情况下映射该对象。
    • 方法

    方法名

    说明

    C# 查询表达式语法

    Visual Basic 查询表达式语法

    更多信息

    Select

    映射基于转换函数的值。

    select

    Select

    Enumerable.Select

    Queryable.Select

    SelectMany

    映射基于转换函数的值序列,然后将它们展平为一个序列。

    使用多个 from 子句

    使用多个 From 子句

    Enumerable.SelectMany

    Queryable.SelectMany

    • Select 与 SelectMany
         Select() 和 SelectMany() 的工作都是依据源值生成一个或多个结果值。 Select() 为每个源值生成一个结果值。因此,总体结果是一个与源集合具有相同元素数目的集合。与之相反,SelectMany() 将生成单一总体结果,其中包含来自每个源值的串联子集合。作为参数传递到 SelectMany() 的转换函数必须为每个源值返回一个可枚举值序列。然后,SelectMany() 将串联这些可枚举序列以创建一个大的序列。
         下面两个插图演示了这两个方法的操作之间的概念性区别。在每种情况下,假定选择器(转换)函数从每个源值中选择一个由花卉数据组成的数组。
         下图描述 Select() 如何返回一个与源集合具有相同元素数目的集合。
     
         下图描述 SelectMany() 如何将中间数组序列串联为一个最终结果值,其中包含每个中间数组中的每个值。
     
    • 代码示例
    class Bouquet
    {
        public List<string> Flowers { get; set; }
    }
    static void SelectVsSelectMany()
    {
        List<Bouquet> bouquets = new List<Bouquet>() {
            new Bouquet { Flowers = new List<string> { "sunflower", "daisy", "daffodil", "larkspur" }},
            new Bouquet{ Flowers = new List<string> { "tulip", "rose", "orchid" }},
            new Bouquet{ Flowers = new List<string> { "gladiolis", "lily", "snapdragon", "aster", "protea" }},
            new Bouquet{ Flowers = new List<string> { "larkspur", "lilac", "iris", "dahlia" }}
        };
        IEnumerable<List<string>> query1 = bouquets.Select(bq => bq.Flowers);
        IEnumerable<string> query2 = bouquets.SelectMany(bq => bq.Flowers);
        Console.WriteLine("Results by using Select():");
        foreach (IEnumerable<String> collection in query1)
            foreach (string item in collection)
                Console.WriteLine(item);
        Console.WriteLine("
    Results by using SelectMany():");
        foreach (string item in query2)
            Console.WriteLine(item);
    }
    
  • 相关阅读:
    【Unity】自定义编辑器窗口——拓展编辑器功能
    【Unity】AssetBundle的使用——打包/解包
    【Unity】使用Resources类管理资源
    【Unity】使用AssetDatabase编辑器资源管理
    【Unity】协程Coroutine及Yield常见用法
    【Unity】制作简易定时器(Timer)
    python3使用csv模块读写csv文件
    Python3使用csv模块csv.writer().writerow()保存csv文件,产生空行的问题
    MongoDB服务无法启动,发生服务特定错误:100
    ValueError: update only works with $ operators
  • 原文地址:https://www.cnblogs.com/liusuqi/p/3192596.html
Copyright © 2011-2022 走看看