LINQ 学习笔记5 Kevin

查询表达式

1.标准点式语法 和 标准表达式法


标准表达式法接近于SQL语法,点式语法则更便于使用。C#语言并没有要求我们必须使用哪种方式,很显然,点式语法是更好的选择。

在标准表达式法中,Select放在了语句的最后,这样做的原因是为了是方便VS的智能提示。

2.点式语法中常用的查询操作:Where,Select,SelectMany,Join,GroupJoin,GroupBy,OrderBy,ThenBy,OrderByDescending,ThenByDescending.

 

3.查询表达式语法:


1.查询表达式必须以from开头

2.查询表达式必须包含0个或多个from,let,或者 Where从句。from从句是生成一个或多个范围变量结果的产生器,或者join多个连续的结果集。

let从句引用了一个范围变量而且赋值给他。Where从句的作用是从多个结果集中过滤一个结果。

3.在查询语句后跟orderby可以对结果进行排序 , ascending或descending 升序或降序。

4.查询表达式必须跟一个select 或group

5.然后查询表达式可以跟一个可选的从句,可以是into从句也可以是join从句,或者是从2来的一个子句。

透明标识符

(ORZ。。没有中文参考资料。。)

简单的说,是编译器在标准表达式的翻译过程中用到的一种标识,用*号来标识,但不同于SQL语句中的*,而且它只存在于翻译的过程中,一旦表达式的翻译过程完成,这种标识便不再存在。

翻译表达式机制:

1.Select and Group从句

有into的从句,将会进行下面的翻译:

from ...into i....==========> from i in from .....

2.显式枚举变量


一旦表达式中from从句包含一个显示枚举变量,将会进行下面的翻译:

from T e in S =============> from e in s.Cast<T>

如果包含join

Join T e in s on k2,equals k2=========>join e in s.Cast<T> on k2,equals k2

3.Join 从句

from e1 in s1 join e2 in s2 on k2 equals k2 select f

======>

from t in s2.join(s2,e=>k1,e2=>k2,(e1,e2)=>f) select t;

4.如果一个查询表达式包含一个from从句后跟into表达式和select从句,将进行以下的翻译:

from e1 in s1 join e2 in s2 on k1 equals k2 into i select f

======>

from t in s1.GroupJoin(s2,e1=>k1,e2=>k2,(e,i)=>f) Select f

5.如果一个表达式包含from从句后跟join从句,将进行一下的翻译:

from  e1 in s1 join e2 in s2 on k1 equals k2

======>

from * in from e1 in s1 join e2 in s2 on k1 equals k2 select new {e1,e2}

6.Let 和 Where 从句

如果查询表达式包含一个from从句,而且后面直接跟这一个let从句,将执行下面的翻译:

from e in s let l=v

=======>

from * in from e1 in s1 select new {e,l=v};

查询语句from后面跟一个where从句,将执行一下翻译:

from e in s where  w ======>  from e in s.where (e=>w);

7.多个产生器从句 

如果查询表达式包含多个from从句,后面跟了一个selelct 从句,将执行下面的翻译:

from e1 in s1 from e2 in s2 select f

=====>

from c in s1.SelectMany(e1=> from e2 in s2 select f) select c;

8.Orderby

from  e in s order by o1,o2 

=======>

from e in s.orderby(e=>o1).ThenBy(e=>o2);

Chapter 2 Summary

1.var 关键字

2.扩展方法,使给一个类似密封类,或者你没有源码的类对象添加方法成为了可能。

3.Lambda表达式和匿名方法

4.表达式树提供了第三方的数据源

5.分部方法提供了一个轻量级的处理模型。

6.查询表达式

 

原文地址:https://www.cnblogs.com/kfx2007/p/2700464.html