LINQ to Object

LINQ to Object

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

LinQ to Object是指对随意IEnumerableIenumerable<T>集合使用linq查询.它可取代查询不论什么可枚举的集合.List<T>,ArrayDictionary<K,V>. 


LINQ的长处


  和foreache相比有三个长处

  • 它们更简明、更易读,尤其在筛选多个条件时。
  • 它们使用最少的应用程序代码提供强大的筛选、排序和分组功能。
  • 无需改动或仅仅需做非常小的改动就可以将它们移植到其它数据源。

LINQ特性


对象初始化器,这个事实上我们一直在用.就如我们加入非常多的sql參数

SqlParameter[]parameters = {newSqlParameter("@QuestionID",Convert.ToInt32 (map["QuestionID"])),newSqlParameter("@ChapterID",map["ChapterID"].ToString () ),newSqlParameter("@QuestionTypeID",map["QuestionTypeID"].ToString() ),newSqlParameter("@Remark", map["Remark"].ToString () )};

以上是我们经常使用的一种数组初始化器

以下是集合初始化器.

IList<Book> books = new List<Book> {      new Book { Title = "Inside COM", ISBN = "123-456-789",Price=20 },     new Book { Title = "Inside C#", ISBN = "123-356-d89",Price=100 },     new Book { Title = "Linq", ISBN = "123-d56-d89", Price = 120 }};

上节说道LINQ的查询方式有两种,表达式和操作符,Object的操作也是这两种方式;是要明确并非全部的查询和操作符号都具有延时性.我们就開始吧

标准查询whereselect

实例数组的查询

Select[]greetings={
"hello","hello LINQ","How are you"
} 
Var items= from group in greetings where group.lenght>10 select group
//where,selectkeyword是linq to object编程接口标准查询符。grou是查询变量

对集合的查询

//定义一个序列,使用泛型接口时类型T要明白指定详细类型

String[]strArrary={"one","two","three","four","five","six","seven","eight","nine","ten"}
 
//使用标准查询操作符号where,
 
IEnumerable<String> strSquence=strArrary.Where(p=>p.StartWith("t"));
 
//便利输出满足条件的元素
 
Foreach(stringitem in items)
Consel.writeline(item);
Console.Read();

where操作符号返回一个泛型对象。也就是一个序列对象。该对象是在foreach序列化时调用where操作符运行的。这样的查询是延迟查询。

 

比如能够指定一个查询,多次理解查询结果,当被查询的数据在多次力矩之间发生变化,多次查询结果是不同的。每次都是最新的数据

 static void Main(string[] args)        {            int[] intArray = new int[] { 9, 8,7 };            //以下的查询表达式等价于代码 IEnumerable<int> ints = intArray.Select(i => i);            var ints = from i in intArray                       select i;             //第一次列举            foreach (int i in ints)                Console.WriteLine(i);             //改动元素的值            intArray[0] = 999;            intArray[1] = 888;            intArray[2] = 777;           Console.WriteLine("---------");            //第二次列举            foreach (int i in ints)                Console.WriteLine(i);            Console.Read();        } 

LINQ to Object


非延时

假设不想延迟查询,拿上运行,能够再上面的调用方法上转换,ToArrayToLIst等方法

int[] intArray = newint[] { 9, 8, 7 };            //使用ToArray方法进行转换            IEnumerable<int> ints =intArray.Select(i => i).ToArray();             foreach (int i in ints)    //第一次列举                Console.WriteLine(i);            intArray[0] = 999;   //改动元素的值            intArray[1] = 888;            intArray[2] = 777;           Console.WriteLine("---------");             foreach (int i in ints)  //第二次列举                Console.WriteLine(i);

LINQ to Object

为何是同样的,原因在于查询表达式时调用了ToArray方法,马上运行,并将查询结果保存在整数类型数组ints中。两次列举数组中的元素,输出结果同样,改动的仅仅是IntArray数组中的值,并没有影响ints数组值。非常好的一个应用吧

总结


以上述的仅仅是object的冰上一角。很多其它的object的操作方法是在对web页面数据绑定以及form窗口的数据绑定以及综合查询和排序等,以及funt<T,TResult>的应用。下篇介绍泛型托付FuncT<>的应用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118083.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Matlab矩阵复制扩充

    考虑这个问题:定义一个简单的行向量a    如何复制10行呢?即:    同理,对于一个列向量,如何复制10列呢?  关键函数1:repmat(A,m,n):将向量/矩阵在垂直方向复制m次,在水平方向复制n次。      再举一个例子,对于a=[12;34]:         垂直方向复制3次,水平方向复制2次,

    2022年4月8日
    62
  • VMware虚拟机下Centos8 设置静态IP地址

    VMware虚拟机下Centos8设置静态IP地址,如何做?

    2022年2月16日
    96
  • 开启1521端口监听_解决Oracle服务端1521端口无法telnet,服务名未开启监听问题

    开启1521端口监听_解决Oracle服务端1521端口无法telnet,服务名未开启监听问题场景:oracle服务安装在windows本地,oracle客户端在虚拟机中,使用虚拟机连接windows的oracle数据库。问题1:使用虚拟机telnet我本地oracle1521端口,不通解决思路:关闭虚拟机linux防火墙(这个方法有点粗暴,建议在只需要修改防火墙的端口允许通过即可)#1:查看防火状态systemctlstatusfirewalldserviceiptables…

    2022年5月1日
    55
  • uboot的relocation原理详细分析「建议收藏」

    uboot的relocation原理详细分析「建议收藏」所谓的relocation,就是重定位,uboot运行后会将自身代码拷贝到sdram的另一个位置继续运行,这个在uboot启动流程分析中说过。但基于以前的理解,一个完整可运行的bin文件,link时指定的链接地址,load时的加载地址,运行时的运行地址,这3个地址应该是一致的,relocation后运行地址不同于加载地址特别是链接地址,ARM的寻址会不会出现问题?

    2022年6月22日
    40
  • 领峰:贵金属入门投资规则有哪些?这些重要吗?

    领峰:贵金属入门投资规则有哪些?这些重要吗?如今许多年轻人都会选择用投资的方式进行理财,这样可以用闲钱生钱,贵金属是投资市场当中比较受欢迎的一种产品。因为贵金属的高杠杆和国际性可以让大家的盈利空间更大一点,我们只需要懂得里面的规律和走势就可以成功,那么可能亏损的几率会大大增加,今天就一起来看一下贵金属入门投资规则都有哪些?  价格受哪些方面影响  贵金属入门投资规则还是蛮多的,就如投资者应该先了解一下,都有哪些因素会影响到贵金属价格,这一点算是大家的必修课。在整个投资市场中品种不同的产品,它的投资特点是完全不同的,贵金属也是这个样子,所以我们

    2022年5月26日
    34
  • Java中Scanner类的使用方法(小白专属)

    Java中Scanner类的使用方法(小白专属)一、Scanner类简介Java5新引入了java.util.Scanner类,主要用于扫描用户从控制台输入文本的程序。即当用户需要输入数据时,调用java.util包中的Scanner类,Scanner类能获取用户所输入的数据。二、如何使用Scanner类?(按步骤)先导入java.util.Scanner包;创建Scanner类的对象(基本语法)创建一个变量用于接收输入的数据,通过调用Scanner类的对象scanner来调用Scanner类中的next方法(控制台将等待

    2022年7月7日
    23

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号