Linq学习<一>
lambda查询语法: var result =arrarylist.where(n=>n.contains("l")) 简化的委托方法实例
linq查询结构:
var result = from ------- in arrayList
where------
(order-------)
select -------
有点像sql写法:select * from table name where .我们可以简答记成将sql中select放在后面
var是C#中的一个新关键字,用于声明一般的变量类型,特别适合于包含LINQ
查询的结果。var关键字告诉C#编译器,根据查询推断结果的类型。这样,就不必提前声明从LINQ
查询返回的对象类型了——编译器会推断出该类型
下面例子张的数据源是前面声明的字符串数组stringArray。变量items只是数据源中某一元素的代表,类似
于foreach语句后面的变量名。指定from子句,就可以只查找集合的一个子集,而不用迭代所有的
元素。
public void test() { Console.WriteLine("-----------Linq first Example------------------"); string[] stringArray = new string[] {"cat","litter","cot","dog","love","like" }; var result = //linq way,查询语法 from items in stringArray where items.StartsWith("l") select items; foreach (var item in result) { Console.WriteLine(item); } //,var是C#中的一个新关键字,用于声明一般的变量类型,特别适合于包含LINQ查询的结果。var关键字告诉C#编译器,根据查询推断结果的类型 }
linq是一种查询语法,还有一种方式语法,就是lambda,用起来更方便
public void lambdaTest() { Console.WriteLine("-----------Lamada text------------------"); string[] stringArray = new string[] { "cat", "litter", "cot", "dog", "love", "like" }; var result = stringArray.Where(n => n.StartsWith("l")); //Lambda way查询语法 foreach (var item in result) { Console.WriteLine(item); } }
2.linq排序
public void LinqSortTest() { Console.WriteLine("-----------result after sort-------------------"); string[] stringArray = new string[] { "cat", "litter", "cot", "dog", "love", "like" }; var result = //linq way,查询语法 from items in stringArray where items.StartsWith("l") // orderby items descending //ascending 默认从A——Z orderby items.Substring(items.Length-1) //从items的倒数第二字母开始排序 select items; foreach (var item in result) { Console.WriteLine(item); } }
用lamabda排序
public void lambdaOrderTest() { Console.WriteLine("-----------lambdaOrderTest-------------------"); string[] stringArray = new string[] { "cat", "litter", "cot", "dog", "love", "like" }; var result =stringArray.OrderBy(n=>n).Where(n=>n.Contains("l")); // var result = stringArray.OrderByDescending(n => n).Where(n=>n.Contains("l")); // var result = stringArray.OrderBy(n => n.Substring(n.Length - 1)).Where(n=>n.StartsWith("l")); foreach (var item in result) { Console.WriteLine(item); } }
3.用ramdon生成一个大的int数组进行操作
public void SearchDataFromABigArray() { Console.WriteLine("--------------Get Data from a big array----------------------"); int[] intArray = GeneratorBigArray(12345678); var result = from items in intArray where items < 10000 select items; foreach (var item in result) { Console.WriteLine(item); } }
linq基本寒素:sum,max,min,averge 注意sum时如果数据过大,对于32位会产生溢出错误,linq有Longcount(),也就是将结果转为64位,防止溢出错误,如下:
Console.WriteLine(result.Sum(n=>(long)n));
public void UsingFunctionOfLinq() { Console.WriteLine("----------------------using fuction in linq--------------------------"); int[] intArray = GeneratorBigArray(12345678); var result = from items in intArray where items > 1000 select items; Console.WriteLine("sum is:"); Console.WriteLine(result.Sum(n=>(long)n)); Console.WriteLine("max is:"); Console.WriteLine(result.Max()); Console.WriteLine("min is:"); Console.WriteLine(result.Min()); Console.WriteLine("average is :"); Console.WriteLine(result.Average()); }
生成大数据函数:
这里采用radom(0)来生成不一样的数据,赋值给int数组,
private int[] GeneratorBigArray(int p) { Random genertor = new Random(0); int[] array = new int[p]; for (int i = 0; i < p - 1; i++) { array[i] = genertor.Next(); } return array; }