文章速览
- 概述
- 使用注意
- 查询子句
- 实例
概述
LINQ是一组技术的名称,这些技术建立在将查询功能直接集成到C#语言(以及Visual Basic和可能的任何其他.NET语言)的基础上。借助于LINQ,查询已是高级语言构造,就如同类、方法和事件等。
通过使用查询语法,可用最少的代码对数据源执行复杂的筛选、排序和分组操作,使用相同的基本查询表达式模式来查询和转换SQL数据库、ADO.NET数据集、XML文档和流以及.NET集合中的数据等。
使用注意
1、查询表达式可用于查询和转换来自任意支持LINQ的数据源中的数据。例如,单个查询可以从SQL数据库中检索数据,并生成XML流作为输出。
2、查询表达式使用许多常见的C#语言构造。
3、查询表达式中的变量都是强类型,一般不需要显示提供类型,编译器可以自行推断。
4、循环访问foreach语句中的查询变量前,不会执行查询。
5、编译时,根据C#规范中设置的规则将查询表达式转换为“标准查询运算符”方法调用。任何可以使用查询语法表示的查询都可以用方法语法表示,但查询语法更为简洁、易读。
6、编写LINQ查询的规则,尽可能使用查询语法,只在必须情况下才使用方法语法。
7、查询表达式可以编译为表达式目录树或委托,具体取决于查询所应用到的类型。其中,
IEnumerable查询编译为委托;
IQueryable和IQueryable查询编译为表达式目录树。
查询子句
子句 | 说明 |
---|---|
from | 指定数据源和范围变量 |
select | 指定执行查询时返回的序列中的元素将具有的类型和形式 |
group | 按照指定的键值对查询结果进行分组 |
where | 根据一个或多个由逻辑“与”和逻辑“或”运算符(&&或||)分隔的布尔表达式筛选源元素 |
orderby | 基于元素类型的默认比较器按升序或降序对查询结果进行排序 |
join | 基于两个指定匹配条件之间的相等比较来连接两个数据源 |
let | 引入一个用于存储查询表达式中子表达式结果的范围变量 |
into | 提供一个标识符,它可以充当对join、group、或select子句的结果的引用 |
实例
查询字串数组中是否包含长度大于6并且包含”非“的字符串
static void Main(string[] args)
{
string[] strArray = new string[] { "无眼界乃至无意识界", "无无明亦无无明尽", "非淡泊无以明志","非宁静无以致远" };
//string[] str2 = Array.FindAll(str, s => (s.IndexOf("r") > 0));
//查询字串数组中是否包含长度大于6并且包含”非“的字符串
IEnumerable<string> selectQuery =
from str in strArray
where str.Length >6 && str.IndexOf('非') > -1
select str;
foreach (string str in selectQuery) {
Console.WriteLine(str);
}
Console.ReadLine();
}
运行结果: