C#中的LINQ 基础

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中的LINQ 基础相关的知识,希望对你有一定的参考价值。

1.LINQ的数据源
必须可枚举的,即必须是数组或者集合
(继承了IEnumerable<T>接口就可以,注意是IEnumerable<T>,不是IEnumerable接口,不一样,继承后者只能使用foreach,不能使用linq

定义:Linq 是一跨各种数据源和数据格式的数据模型;它在查询是,始终是把它作为一种对象来操作,可以使用基本相同的编码模型查询和数据的转换XML,SQL,ADO数据等;  


对于自定义属性类,继承CollectionBase类,实现了索引器,但是没有实现集合的函数,所以这种类是无法实现LINQ语句的,但是可以使用foreach来访问,书中讲foreach遍历的是实现了IEnumerale接口的集合,可见并不是这样的,foreach只是遍历有索引器的集合,而LINQ才真正遍历实现了IEnumerable接口的集合
复习一下集合的要求:
1.要迭代一个类,需要实现GetEnumerator()方法,返回类型是IEnumerator
2.要迭代类的成员,使用IEnumerable返回类型
  1. class farmer : CollectionBase
  2. {
  3. public string _name;
  4. public int _age;
  5. public farmer(string s, int i )
  6. {
  7. _name = s;
  8. _age = i;
  9. }
  10. public void add(farmer s)
  11. {
  12. List.Add(s);
  13. }
  14. public farmer this[int index]
  15. {
  16. set { List[index] = value; }
  17. get { return (farmer)List[index]; }
  18. }
  19. }
2.LINQ的两种写法
  1. var query = from customer in this._customerList
  2. where customer.City == "台北"
  3. let Index = this._customerList.IndexOf(customer)
  4. select new { customer, Index };
这种写法的select可以返回对象,字段,匿名类型返回的是一个新的对象(这样理解var query = new {customer,index})
------------------------------------------------------------------------------------------
  1. var query = this._customerList
  2. .Where(c => c.City == "台北") //这里面的C就是对象
  3. .Select(c => new { custom = c, Index = this._customerList.IndexOf(c) }); //返回的是新的query对象集合,这个集合里面装的是匿名对象‘a的集合
这种写法中Select叫做投影运算符,是在Linq查询中从其他数据类型中创建新数据类型的技术(它可以改变结果的原始类型)
其中Select和Where的顺序可以调换
重点:只有在这种写法中才能用lambda表达式

Foreach 迭代时访问的其实是IEnumerator迭代器这个东西,任何实现了IEnumerator GetNumerator方法的接口,都能实现foreach的遍历

LINQ的数据源必须是继承了IEnumerable<T>接口的类,LINQ迭代的不仅仅是IEnuamertor迭代器,还有其他东西


from 指定数据源和范围变量

where 根据布尔表达式(由逻辑与 或 等组成)从数据源中筛选元素

select 指定查询结果中的元素所具有的类型或表现形式

group 对对查询结果按照键值进行分组

into 提供一个标示符,它可以充当对 join group 或 select 子句结果的引用

orderby 对查询出的元素进行排序

join 按照两个指定匹配条件来联接俩个数据源

let 产生一个用于查询表达式中子表达式查询结果的范围变量



迭代器块中用于向枚举数对象提供值或发出迭代结束信号。

yield return <expression>;
yield break;

计算表达式并以枚举数对象值的形式返回;expression 必须可以隐式转换为迭代器的 yield 类型。

yield 语句只能出现在 iterator 块中,该块可用作方法、运算符或访问器的体。







以上是关于C#中的LINQ 基础的主要内容,如果未能解决你的问题,请参考以下文章

LINQ基础资料

LINQ基础

C# 之 LINQ简析

C#中的LINQ

C#开发利器 Linq Pad 相关

C#中的LINQ