zoukankan      html  css  js  c++  java
  • 活代码LINQ——07

    来源说明:https://blog.csdn.net/sha574810590/article/details/40738069

    在LINQ中,数据源和查询结果实际上都是IEnumerable<T>或IQueryable<T>类型对象,所以可以通过使用普通对象的形式(调用方法、使用属性等)对数据源进行查询或使用查询结果数据。

     1.IEnumerable<T>接口

    IEnumerable<T>泛型接口支持在制定数据集合上进行迭代操作。它定义了一组扩展方法,用来对数据集合中的元素进行遍历、过滤、排序、搜索等操作。在LINQ中,数据源实际上是实现了接口IEnumerable<T>的类,通过select子句返回的查询结果页是一个实现了IEnumerable<T>的类。

    在.NET类库中,IEnumerable<T>接口提供了大量与查询相关的方法。这些方法实际上是以扩展方法的形式定义,但是由于它的作用类型也为IEnumerable<T>接口,所以使用上和成员方法很类似。

    IEnumerable<T>接口主要成员

     

     成员

     功能

     Aggregate  对序列应用累加器函数,可以指定累加方法
     Sum

     计算序列中所有元素的和,返回值有int、long、float、double、decimal类型,并且可以指定元素到数值的映射方法

     Average

     计算序列中所有元素的平均值,返回值有int、long、float、double、decimal类型,并且可以指定元素到数值的映射方法

     Max  计算序列中所有元素的最大值,返回值有int、long、float、double、decimal类型,并且可以指定元素到数值的映射方法
     Min  计算序列中所有元素的最小值,返回值有int、long、float、double、decimal类型,并且可以指定元素到数值的映射方法
     All  检查是否序列中所有元素都满足条件,可以指定条件判断方法。如果所有元素都满足条件返回True,否则返回False
     Any  检查序列中是否有任何一个元素满足条件,可以指定条件的判断方法。如果有一个以上(含一个)元素满足条件返回True,否则返回False
     Contains  检查数据系列中是否包含特定的元素,可以指定相等比较方法
     Count  返回序列中满足指定条件的元素的数量,可以指定条件判断方法
     LongCount  返回序列中满足指定条件的元素的长数量,可以指定条件判断方法
     Cast  将IEnumerable中的元素转换为指定的数据类型
     DefaultIfEmpty  返回序列中指定位置的元素。如果序列为空,则返回默认的元素值
     ElementAt  返回序列中指定索引处的元素
     ElementAtOrDefault  返回序列中指定索引处的元素。如果序列为空,则返回默认值
     First  返回序列中满足指定条件的第一个元素,可以指定条件判断方法
     FirstOrDefault  返回序列中满足指定条件的第一个元素。如果不存在则返回默认值,也可以指定条件判断方法
     Last  返回序列中满足指定条件的最后一个元素,可以指定条件判断方法
     LastOrDefault  返回序列中满足指定条件的最后一个元素。如果不存在则返回默认值,也可以指定条件判断方法
     Single  返回序列中满足指定条件的唯一元素。如果不止一个元素满足条件会引发一场,可以指定条件判断方法
     SingleOrDefault 返回序列中满足指定条件的唯一元素。如果不存在则返回默认值,如果不止一个元素满足条件会引发一场,可以指定条件判断方法 
    Reverse 反转序列中元素的顺序 
     Distinct 返回序列中不重复的元素的集合,可以指定相等比较方法 
     Concat 连接两个序列,直接首尾相连。返回结果可能存在重复数据 
     Except 获取两个元素集合的差集,可以指定相等比较方法 
     Intersect  获取两个元素集合的交集,可以指定相等比较方法
     Union  获取两个元素集合的并集,可以指定相等比较方法

     SequenceEqual

    比较两个序列是否相等,可以指定相等比较方法 
     Where 根据制定条件对集合中元素进行筛选,返回满足条件的元素集合 
     Skip 跳过序列中指定数量的元素,然后返回剩余的元素 
     SkipWhile 跳过序列中满足指定条件的元素,然后返回剩余的元素,可以指定条件判断方法 
     Take 从序列的开头返回指定数量的连续元素 
     TakeWhile 返回从序列开始的满足指定条件的连续元素,可以指定条件判断方法 
     ToArray 从IEnumerable<T>创建一个数组 
     ToList 从IEnumerable<T>创建一个List<T> 

    从上表可以看出,IEnumerable<T>提供的方法包括数值运算(Sum、Min、Max、Average)、元素数量(Count、LongCount)、取值(First、Last、ElementAt等)、提取子集(Skip、SkipWhile、Take、TakeWhile、)集合操作(Reverse、Concat、Distinct、Except、Intersect、Union、SequenceEqual等)。这些方法提供了LINQ所需要的所有操作。

    注意:

    IEnuerable<T>继承自IEnumerable<T>接口,所以它也包含IEnumerable接口的所有方法,所以还包括Select()、SelectMany()、Repeat()等方法。

    另外,IQuery<T>接口从IEnumerable<T>派生而来,通常也可以作为数据源使用,它的使用和IEnumerable<T>类似。

    1.Aggregate(聚合)的用法:

      简介:适用于集合的一个或多个聚合函数。 标准聚合函数都All, Any, Average, Count, LongCount, Max, Min,和Sum函数。

    Module Module1
    
        Sub Main()
            Dim numbers1 As Integer() = {1, 2, 3, 4, 5}
    
            Dim query1 As Integer = Aggregate num In numbers1 Into Sum(num)
    
            Console.WriteLine("Sum = " & query1) ‘显示结果为 Sum = 15
    
            Dim numbers2 As Decimal() = {1.9, 2, 8, 4, 5.7, 6, 7.2, 0}
    
            Dim query2 = Aggregate num In numbers2 Into Sum()
    
            Console.WriteLine("SumSalary = " & query2) ‘显示结果为 SumSalary = 34.8
    End Sub End Module

     运行结果:

     

    2.Aggregate(聚合)数学运算:

    Module Aggregate_数学运算
        Sub Main()
            Dim numbers As Integer() = {1, 3, 5, 6, 3, 9, 7}
    
            Dim numberTotal As Integer = Aggregate num In numbers Into Sum(num)
            Dim numberMax As Integer = Aggregate num In numbers Into Max(num)
            Dim numberAverage As Double = Aggregate num In numbers Into Average(num)
            Dim numberCount As Integer = Aggregate num In numbers Into Count()
            Dim numberMin As Integer = Aggregate num In numbers Into Min(num)
            Console.WriteLine("Sum = " & numberTotal & vbCrLf & _
                              "Max = " & numberMax & vbCrLf & _
                              "Average = " & numberAverage & vbCrLf & _
                              "Count = " & numberCount & vbCrLf & _
                              "Min = " & numberMin)
        End Sub
    End Module
    

      运算结果:

     3.Distinct分句的用法

    '将list列表的元素以集合的形式传给IEnumerable接口
    Module ListCollection
       Sub Main()
            Dim items As New List(Of String)
            items.Add("red")
            items.Insert(0, "yellow")
            items.Add("green")
            items.Add("yellow")
            Dim delChongfu = _
                 From element In items _
                 Select element _
                 Distinct '若有相同的值,保留一个值,删除其他的值
            Display(delChongfu)
        End Sub ' Main
    
        Sub Display(ByVal items As IEnumerable)
            For Each item In items
                Console.Write(" {0}", item)
            Next
            Console.WriteLine()
        End Sub
    End Module
    

      运行结果(本来有两个yellow,只保留了一个yellow):

    来源:https://blog.csdn.net/sha574810590/article/details/40738069

  • 相关阅读:
    HDU 5791 Two (DP)
    POJ 1088 滑雪 (DPor记忆化搜索)
    LightOJ 1011
    POJ 1787 Charlie's Change (多重背包 带结果组成)
    HDU 5550 Game Rooms (ccpc2015 K)(dp)
    HDU 5542 The Battle of Chibi (ccpc 南阳 C)(DP 树状数组 离散化)
    HDU 5543 Pick The Sticks (01背包)
    HDU 5546 Ancient Go (ccpc2015南阳G)
    NB-IoT的DRX、eDRX、PSM三个模式 (转载,描述的简单易懂)
    MQTT 嵌入式端通讯协议解析(转)
  • 原文地址:https://www.cnblogs.com/xiehaofeng/p/10079693.html
Copyright © 2011-2022 走看看