什么是LINQ
从对象获取数据的方法一直都是作为程序的一部分而设计的,然而使用LINQ可以很轻松的查询对象集合
LINQ提供程序
匿名类型
匿名类型经常用于LINQ查询的结果之中
匿名类型的对象创建表达式:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
namespace Csharpzuoye
{
class Program
{
static void Main()
{
//必须使用var 匿名对象初始化语句
var student = new { Name = "Mary Jones", Age = 19, Major = "History" };
Console.WriteLine("{0},Age {1},Major:{2}", student.Name, student.Age, student.Major);
}
}
}
投影初始化语句
除了对象初始化语句的赋值形式,匿名类型的对象初始化语句还有两种允许的形式:简单标识符和成员访问表达式
如果编译器遇到了另一个具有相同的参数名,相同的推断类型和相同顺序的匿名类型,它会重用这个类型并直接创建新的实例,不会创建新的匿名类型
方法语法和查询语法
示例:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Csharpzuoye
{
class Program
{
static void Main()
{
int[] numbers = { 2, 5, 28, 31, 17, 16, 42 };
var numsQuery = from n in numbers //查询语法
where n < 20
select n;
var numsMethod = numbers.Where(x => x < 20); //方法语法
int numsCount = (from n in numbers //两种方法的组合
where n < 20
select n).Count();
foreach (var x in numsQuery)
Console.Write("{0} ", x);
Console.WriteLine();
foreach(var x in numsMethod)
Console.Write("{0} ", x);
Console.WriteLine();
Console.WriteLine(numsCount);
}
}
}
查询变量
LINQ 查询可以返回两种类型的结果--可以是一个枚举(可枚举的一组数据,不是枚举类型)它满足查询参数的项列表,也可以是一个叫做标量的的单一值,它满足查询条件的结果的某种摘要形式
查询表达式的结构
查询表达式有查询体后的from子句组成
from子句
from子句指定了数据源使用的数据集合,它还引入了迭代变量
join子句
联结的语法如下:
使用联结来结合两个或更多集合中的数据
联结操作接受两个集合然后创建一个临时的对象集合,每一个对象包含原始集合对象中的所有字段
什么是联结
LINQ 中的 join 接受两个集合然后创建一个新的集合,每一个元素包含两个原始集合中的原始成员