本文将讲述C#中的Linq技术。
一:linq是什么?
linq可以理解为嵌入C#语法的强类型查询语言。(注意:尽管linq看起来和Sql查询很像,但语法却不相同。)
二:linq的作用? 提供一种统一且对称的方式,让程序员得到数据和操作数据(此处的数据可以是XML,DataSet,物理数据等)
三:linq可应用在哪些场景? Linq to Object、Linq to XML、Linq to DataSet、Linq to Entities、Parallel Linq(并行处理linq查询返回的数据)
linq的基本语法:var result = from item in container select item;
linq获取数据子集: var result = from item in container where booleanexpression select item; linq to object 例子
static void QueryStrings() { string[] games = { "Morrowind", "Uncharted 2", "Fallout 3", "Daxter", "Shock2" }; //构建一个查询表达式(注意:ling表达式在迭代内容之前,他们不会真正的运行计算)//linq此时还没有运算 //linq查询的结果集,应该总是使用隐式类型,在绝大数情况下,真正的返回值实现了泛型 IEnumerable<T>接口的类型 var subset = from g in games where g.Contains(" ") orderby g select g; //上面代码也可以写成 IEnumerable<string> subset = from g in games where g.Contains(" ") orderby g select g; //输出结果。在迭代的时候才运算(这叫:延迟执行) foreach (string s in subset) { Console.WriteLine("含有空格的是:{0}",s); } }
linq在迭代外运算例子:
//在foreach逻辑外运算linq static void QueryInt() { //如果希望在foreach逻辑外表运算Linq表达式,可以调用有Enumerable类型定义的扩展方法。如ToArray<T>()、ToList<T>()等。 int[] numbers = { 2, 10, 30, 15, 1, 22 }; //立即获取数据 int[] rst =( from i in numbers where i >10 orderby i select i).ToArray<int>();
}
linq查询中的常用函数 1.count<T>() 获取linq查询表达式返回的项数
static void FunLinq() { int[] numbers = { 2, 10, 30, 15, 1, 22 }; //输出大于10的总数 int count = (from i in numbers where i > 10 orderby i select i).Count<int>(); Console.WriteLine(count);//输出:3 }
2.Reverse<T>对linq结果集中的项进行反转
var newnumbers = from i in numbers select i; foreach (var p in numbers.Reverse()) { Console.WriteLine(p);//输出22 1 15 30 10 2 }
3.orderby 对linq进行排序,默认是正序
//排序(正序) string[] games = { "Morrowind", "Uncharted 2", "Fallout 3", "Daxter", "Shock2" }; var newn = from i in games orderby i ascending select i; foreach (var p in games) { Console.Write(p+",");// }
4.Distinct()移除数据中的重复项目
//排序(正序) string[] games = { "Morrowind", "Uncharted 2", "Fallout 3", "Daxter", "Shock2", "Shock2"}; var newn = from i in games orderby i ascending select i; foreach (var p in games.Disinct()) { Console.Write(p+",");// }
5.聚合操作
//聚合操作 //最大值 var maxi =( from i in games orderby i ascending select i).Max(); //最小值 var mini = (from i in games orderby i ascending select i).Min(); //平均值 var avar = (from i in numbers orderby i ascending select i).Average(); //总和 var sum = (from i in numbers orderby i ascending select i).Sum();
|
请发表评论