Linq查询,是对实现了IEnumerable接口的对象的操作;
如int[] values = { 1, 2, 5, 2, 3, 5, 5, 3, 4, 3, 3 };
var result = from item in values
group item by item into g
orderby g.Count() descending
select new {数字=g.Key,次数=g.Count()};
foreach (var item in result.Take(3))
{
Console.WriteLine(item.数字+"="+item.次数);
}
From item in values,类似于foreach中的参数一样,values是一个数组,item表示values中的一个元素,由于item可能是引用类型,所以可能会有一些属性,这样可以把item理解成一张表,它的属性可以理解成表中的字段,然后by后面跟的就是根据哪个字段分组。然后可以把分组后的数据放到一组中into g,g表示的是组的名字。然后还可以对组进行操作,比如orderby 排序,descending表示降序排序。Select 表示赋值给变量,如果变量时var[]类型的话,可以使用匿名类型。
匿名类型:new{属性1=value,属性2=value,属性3=value};表示建立了一个匿名类型的对象;
如果又声明了一个相同类型的匿名类型,则不会再新建一个新的匿名类型;而使用存在的匿名类型。
Var val=from item in values where bool表达式。 查询条件。Where后的表达式可以是任何布尔的表达式。
IEnumerable<T>的扩展方法有很多,可以看看,比如avg,max,min,Connect,take,first;等等。Take(int num)表示去结果集的前几个记录。
Var是一个可以推断类型的变量,它不能作为参数类型,不能作为返回值类型。比如var a=10;
则a是一个整型,如果a=”3”,则报错。