linq入门

只要是集合都可以用linq查询的,(必须支持Ienumerable接口)比如对象,数据库,xml,实体数据模型,外部应用程序等等,省写很多代码。

指定数据源:from子句

指定条件:where子句(限制运算符)

指定元素:select子句

Foreach循环实际上并不是linq的一部分,只是迭代结果,不过它是实际执行查询的代码,查询结果变量仅保存了执行查询计划,在访问查询结果之前,并没有提取linq数据,此之谓查询的延迟也

查询语法是首选方式,很直观,当然也可以用方法语法(lambda表达式什么的)

排序用orderby子句,默认顺序,倒叙要加个descending 在后面

Linq提供了一组聚合运算符可以用于分析查询的结果:

Count() 结果的个数

Min() 结果中的最小值

Max() 结果中的最大值

Average() 数字结果的平均值

Sum() 所有数字结果的总和

Aggregate()累加

聚合运算符返回一个简单的标量类型,而不是一系列结果,所以会立即执行查询

查询复杂的集合时,可能需要在查询中创建新对象,与sql不同,linq中的select不能选取多个字段,所以需要动态创建新对象来保存查询的结果(匿名类的语法)

单值选择查询 在结果集上用.distinct()

另一类查询是确定数据是否满足某个条件,linq提供2个布尔方法:Any()和All()

多级排序,在orderby后跟多个字段,或用方法语法thenby()

组合查询:

Var queryResults=

                From c in customers

                Group c by c.region into cg

                Select new {total=cg.sum(c=>c.salses),region=cg.key};

Take()和skip()运算符,这是分区运算符,take只取结果集的前n个结果,类似sql server中的 top,而skip正相反

Linq通过first()方法返回结果集中第一个匹配给定条件的元素,还可以用firstOrDefault()

集运算符有:union(),intersect(),except()。

集运算符要求成员有相同的类型,才能确保得到希望的结果

而join查询就方便多了,专门处理不同对象。例如:

Var queryResults=

                From c in customers

                join o in orders on c.id equals o.id

                Select new {c.id,c.city,salesBefore=c.sales,neworder=o.amount};

也可以这样:

          From c in customers

          From o in orders

          Where c.id==o.id

        

Linq 的变体:

Linq to objects

Linq to XML

Linq to ADO.NET(entities,dataset,sql,pLinq)

使用linq to entities 类的第一步是为要访问的数据库创建objectContext对象的一个实例,这是在数据源中创建的.edmx文件的编译类,这个对象是数据库的网关,提供了在程序中控制它的所有方法,还是创建业务对象的工厂

Linq to XML 为创建和查询XML数据提供了额外的选项,开发速度加快

   Xdocument doc=new xdocument(

new xelement(“customers”,

new xelement(“customer”,…),new xelement(“customer”,…)));

保存save()和加载load()xml文档

从字符串中加载xml 可以使用parse()方法。

如果想改变xml文档的编码格式,可以在构造的时候添加一个XDeclaration()对象在参数列表开头,或者设置XDocument 的Declaration属性

处理xml片段和处理整个文档一样(根为xelement对象),只是有些节点不可添加,比如注释,声明,处理指令什么的

从数据库中生成XML:

  Xdocument doc=new xdocument(

new xelement(“customers”,

from c in xxx.xxx.AsEnumerable()

select new xelement(“customer”,

new xattribute(“id”,c.customerid),

new xattribute(“city”,c.city))

));

查询xml成员:

Elements()返回xml文档或片段中的所有第一级元素,对于有效的xml文档只有一个第一级元素

Descendants() 返回xml文档或片段中的所有子元素(所有级别的子元素)

Linq to xml 还提供了一个Ancestors()方法,它与Descendants()正相反,只为完整计。

Attributes()返回当前选中元素的所有特性,和descendants()一样可以传送要搜索的具体名称

原文地址:https://www.cnblogs.com/ongoing/p/2787811.html