LINQ(Language Integrated Query )语言集成查询,是一组用于C#和VB语言的拓展,它允许VB或者C#代码以操作内存数据的方式,查询数据库。
LINQ使用的优点:
- 无需复杂学习过程即可上手。
- 编写更少代码即可创建完整应用。
- 更快开发错误更少的应用程序。
- 无需求助奇怪的编程技巧就可合并数据源。
- 能够大幅减少过程控制语句的代码块,使代码的可读性和可维护性大幅提高。
- 任何对象或数据源都可以定制实现LINQ适配器,为数据交互带来真正方便。
LINQ使用:
第一种方法:
查询语句,类似SQL语法
常见子句:
- from子句:指定查询操作的数据源和范围变量
- where子句:筛选元素的逻辑条件,返回值是一个bool类型
- select子句:指定查询结果的类型和表现形式
- orderby子句:对查询结果进行排序(升序或者降序)
- group子句:对查询结果进行分组
- into子句:提供一个临时标识符,该表示可充当对join/group/select子句结果的引用
- join子句:连接多个查询操作的数据源
- let子句:引入用于存储查询表达式中的子表达式结果的范围变
示例
int[] nums = { 1, 2, 4, 5, 6, 7 };//数据源
//linq的第一种写法
var list1 = from a in nums where a%2 == 0 orderby a descending select a;
var list11 = from a in nums where a % 2 == 0 orderby a descending select a/2;
//必须以from开头。以select或者group by结尾。
//其中a为nums中的元素, in 数据源。中间以各种条件连接,比如where 、order by 结尾select 查出这个筛选之后的a。
foreach (var item in list1)
{
Console.Write(item);
}
Console.WriteLine("\n");
foreach (var item in list11)
{
Console.Write(item);
}
Console.WriteLine("\n");
结果
第二种方法
常见方法:
Count()、Where()、OrderBy()【默认是升序】OrderByDescending()、Select()、GroupBy()、等等。方法语法中一般结合lambda表达式(委托delegate和匿名的结合)来使用。
示例
//linq的第二种写法
Console.WriteLine("linq的第二种写法");
var list2 = nums.Where(a => a % 2 != 0).OrderByDescending(a=>a);
var list21 = nums.Select(a => a/2).Where(a => a % 2 != 0).OrderByDescending(a => a);
foreach (var item in list2)
{
Console.Write(item);
}
Console.WriteLine("\n");
foreach (var item in list21)
{
Console.Write(item);
}
Console.WriteLine("\n");
//计算1/nums并按计算大小降序进行排列
var list3 = nums.Where(a => a % 2 == 0).OrderByDescending(item => 1/item);
foreach (var item in list3)
{
Console.Write(item);
}
Console.WriteLine("\n");
string[] strs = { "胡广成", "张国荣", "刘德华", "故国冰封", "万里雪飘", "AAA", "胡翰轩", "张杰" };
var list4 = strs .Select(item => item).GroupBy(item => item.Length);//分组 分组依据是字符串的长度
foreach (var item in list4)
{
Console.WriteLine("----------------");
Console.WriteLine($"分组字段是{item.Key}"); //item.Key是分组依据 显示分组字段
foreach (var items in item)//内层循环遍历分组项
{
Console.WriteLine(items);
}
}
Console.ReadKey();