linq(Language Integrated Query,语言集成查询)是微软提供的一项新技术,能够将查询功能直接引入到C#、VB.NET等编程语言中,查询操作可以通过编程语言自身来表示,而不是嵌入字符串SQL语句。
Linq to Objects 主要负责对象的查询,Linq to XML主要负责xml的查询,linq to ADO.Net 主要负责数据库的查询。
Linq所在的命名空间System.Linq.
简单实例:
int[] nums = { 1, 2, 4, 5, 3, 6, 3, 7 };
var list = from num in nums
where num % 2 != 0
orderby num descending
select num;
foreach (int item in list)
{
Console.WriteLine(item);
}
输出结果:7 5 3 3 1
扩展方法Select():Select()是一个泛型扩展方法,Select()方法使用的时候,要求传递一个委托实例(委托实例就是一个方法)。Select()方法里面是一个Lambda表达式,返回结果是一个迭代器(Iterationrator),数组、泛型集合都可以使用扩展方法Select()。
int[] nums = { 1, 2, 4, 5, 3, 6, 3, 7 };
var list = nums.Select(item => item * item);
foreach (int item in list)
{
Console.WriteLine(item);
}
where()方法
where()方法是一个扩展泛型方法,where()方法使用的时候要求传递一个委托实例,但该实例是一个判断条件,因此返回的类型必须是bool类型.
int[] nums = { 1, 2, 4, 5, 3, 6, 3, 7 };
var list = nums.Where(item => item % 2 == 0)
.Select(i => i * i);
foreach (int item in list)
{
Console.WriteLine(item);
}
排序数据:OrderBy()
OrderBy()是一个扩展方法,OrderBy()里面的参数要求传递一个排序的字段,默认按照升序排序,如果想要降序可以使用OrderByDescending方法。
int[] nums = { 1, 2, 4, 5, 3, 6, 3, 7 };
var list = nums.Where(num => num != 0)
.Select(num => num * num)
.OrderBy(num => num);
foreach (int item in list)
{
Console.WriteLine(item);
}
实例二:
string[] nums = { "张勇", "张宇", "王宇", "张宇龙", "张宇州", "李白" };
var list = nums.Where(num => num.Length == 2)
.Select(item => item)
.OrderByDescending(item => item.Substring(0, 1));
foreach (string item in list)
{
Console.WriteLine(item);
}
分组数据:GroupBy()方法
Group()是一个扩展方法,GroupBy()里面的参数要求传递一个分组字段。
string[] nums = { "张勇", "张宇", "王宇", "张宇龙", "张宇州", "李白" };
var list = nums.Where(num => num.Length == 2)
.Select(item => item)
.GroupBy(item => item.Substring(0, 1));
foreach (var num in list)
{
Console.WriteLine(num.Key );
foreach (var item in num)
{
Console.WriteLine(item);
}
}