using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;

namespace LINQ技术  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            //LINQ中的Where扩展方法,要想使用,必须导入using System.Linq;   
            //下面我们看一下这个方法的声明   
            //public static IEnumerable<TSource> Where<TSource>( this IEnumerable<TSource> source,Func<TSource, bool> predicate )   
            //返回类型是:IEnumerable<TSource>   
            //第一参数this IEnumerable<TSource> source代表的是他要扩展的类型,也就是说在IEnumerable<TSource>可以直接调用where方法   
            //Func<TSource, bool> predicate第二个参数是一个委托,下面我们看一下他的声明   
            //public delegate TResult Func<T, TResult>( T arg ) 封装一个带有T类型,返回Tresult类型的方法   
            //下面我们使用Linq中的Where方法来检索我们的列表   
            //我们做一个List<T>的列表,其中存放Person对象,然后我们用where方法检索出年纪在20-30之前的人员 。   
            List<Person> lists = new List<Person>() ;

lists.Add( new Person( "aladdin" , 30 ) ) ;  
            lists.Add( new Person( "jacky" , 20 ) ) ;  
            lists.Add( new Person( "zhao" , 11 ) ) ;  
            lists.Add( new Person( "fuck" , 33 ) ) ;  
            lists.Add( new Person( "emep" , 25 ) ) ;

IEnumerable<Person> reList = lists.Where<Person>( param => param.age >= 20 && param.age<= 30 ) ;

foreach( Person per in reList )  
            {  
                Console.WriteLine( per.name + " " + per.age ) ;  
            }  
            //结果 aladdin jacky

//其实Linq一般的查询,是可以直接写where select 等语句来实现,系统编译时,会自动将他转化成扩展方法的调用   
            var query = from r in lists where r.age >= 20 && r.age <= 30 select r;

foreach( Person per in query )  
            {  
                Console.WriteLine( per.name + " " + per.age ) ;  
            }

//linq语句必须是以from开头,以select 或者 group结尾巴   
            //注意,query变量,只是指定了一个查询方式,并没有执行,真正的执行其实是在foreach时才产生的

//推迟查询的执行   
            //推迟查询的执行也就是说查询是在跌代时才执行的,不是var query中,下面我们来用代码证实

Console.WriteLine( "增加新内容后的输出--------------") ;  
            lists.Add( new Person( "newaladdin" , 22 ) ) ;  
            //我们增加了一个新对象,22岁,明显是符合条件的,下面我们二次跌代   
            foreach( Person per in query )  
            {  
                Console.WriteLine( per.name + " " + per.age ) ;  
            }  
            //可以看出,第二次跌代完全可以接触到新对象,而我们并没有定义新的query 这就是推迟查执行

Console.ReadLine() ;  
        }

class Person  
        {  
            public string name ;  
            public int age ;

public Person( string name , int age )  
            {  
                this.name = name ;  
                this.age = age ;  
            }  
        }  
    }  
}

转载于:https://www.cnblogs.com/skyado/archive/2009/11/07/1597858.html

C#中LINQ技术的简单小例相关推荐

  1. pythonpandas读取csv文件最后一行_简单小案例(一):使用Pandas在Python中读取和写入CSV文件...

    前期文章链接: YOLOv3论文 https://arxiv.org/pdf/1804.02767.pdf 正文: 有许多方法可以在Python中读写CSV文件.有几种不同的方法,例如,您可以使用Py ...

  2. [转载] pythonpandas读取csv文件最后一行_简单小案例(一):使用Pandas在Python中读取和写入CSV文件...

    参考链接: 使用Pandas在Python中读写CSV文件 前期文章链接: YOLOv3论文 https://arxiv.org/pdf/1804.02767.pdf 正文: 有许多方法可以在Pyth ...

  3. 关于微信小程序中时间预约的简单实现

    关于微信小程序中时间预约的简单实现 1. js中定义获取日期函数.日期点击事件 2. 在data中定义数组等变量 3. onLoad调用函数并保存回data 4. wxml展示 5. 页面监控函数on ...

  4. Python 100个简单小例子(持续更新中)

    Python 100个简单小例子(持续更新中) 1 编写一个计算平年还是闰年的小例子其核心是年份可以整除4和400,且不是100的倍数且2000年是特殊年份为闰年! year = int(input( ...

  5. matlab 简单算例,(简单算例)基于Matlab的电力系统潮流编程计算.pdf

    (简单算例)基于Matlab的电力系统潮流编程计算 基于Matlab的电力系统潮流编程计算 口黄扬威吴喜春郭志峰张斯翔 (三峡大学电气与新能源学院湖北·宜昌443002) 摘要:通过介绍电力系统的实际 ...

  6. word中项目符号自动变小_HTML和Word中的项目符号点类型和创建

    word中项目符号自动变小 Bullet Pointis a thick point symbol used to create a top-down list of text to express ...

  7. App自动化测试实施中的技术挑战

    一次编写多处运行的动态化容器技术给研发效率带来了极大的提升,但对于依旧需要多端验证的测试流程来说,在效率层面却面临着极大的挑战.本文围绕动态化容器中的动态布局技术,阐述了如何通过可测性改造来帮助达成提 ...

  8. 聊聊我们Java中代码优化的30个小技巧

    今天我们一起聊聊Java中代码优化的30个小技巧,希望会对你有所帮助. 1.用String.format拼接字符串 不知道你有没有拼接过字符串,特别是那种有多个参数,字符串比较长的情况. 比如现在有个 ...

  9. 3D渲染中纹理映射技术与贴图制作技巧简介

    最近在做3D渲染画面优化工作,在优化过程中发现了一些贴图制作上的问题.这里针对这类问题的相关技术进行一个简单的介绍,并且针对这些问题给出我自己的一些制作上的建议. 1.什么是纹理映射: 纹理映射是将纹 ...

最新文章

  1. python whl大全
  2. Understand分析Kinect SDK 1.7自带例子(C++)图集一
  3. C语言 满分代码 L1-047 装睡(解题报告)
  4. 【NC14 按之字形顺序打印二叉树】
  5. signed 与 unsigned 有符号和无符号数
  6. Vue 学习笔记(2)Vue 生命周期、组件
  7. Linux内核调度——《奔跑吧Linux内核》学习笔记
  8. 【图像分割】基于matlab分水岭算法图像分割【含Matlab源码 390期】
  9. stm32使用查表法将utf8转gbk,编码表数组存放在外部flash中
  10. eclipse中Debug调试基本操作
  11. devise rails
  12. 史上最简单的 MySQL 教程(十二)「列属性 之 唯一键」
  13. 混合App WebView自动化测试
  14. 判断字符串数组能否首尾相连
  15. 用C#调整Excel 的行高和列宽
  16. 自建私有云与公有云托管对比_共享托管和云托管的比较以及如何选择
  17. 模拟微博用户注册的程序【使用了HashSet集合实现】
  18. 每日一句--必应英语
  19. 工作之外如何实现自我提升
  20. BZOJ3141:[HNOI2013]旅行

热门文章

  1. Windows下批量删除svn配置文件夹.svn
  2. Android 的 dex2jar 和 jd-gui 反编译 apk 源代码
  3. Shiro切入Spring的方式
  4. Maven系列二setting.xml 配置详解
  5. 评估创业项目的十大标准
  6. Google Wave了解(资料收集)
  7. Back 键与Home键
  8. TortoiseSVN Launch Failed Error:系统找不到指定路径
  9. android SharedPreferences保存list数据
  10. android Map集合的遍历