DebugLZQ 通过本文主要向大家介绍了马桶c的个人空间,c语言,欲情 c max,维生素c,奔驰c200等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
LINQ查询表达式的基本语法很容易掌握,它使用C#常见的语言构造,从外观上看,和我们常用的SQL类似,并且查询表达式中的变量可以用匿名类型,所以在很多情况下,不需要指定变量类型就可以构建LINQ表达式。
LINQ的数据源可以是数据库对象或是XML流等,也可以使实现了IEnumerable或者泛型IEnumberable<T>接口的集合对象。
LINQ的基本语法包含如下的8个上下文关键字,这些关键字和具体的说明如下:
关键字 | |
from | 指定范围变量和数据源 |
where | 根据bool表达式从数据源中筛选数据 |
select | 指定查询结果中的元素所具有的类型或表现形式 |
group | 对查询结果按照键值进行分组(IGrouping<TKey,TElement>) |
into | 提供一个标识符,它可以充当对join、group或select子句结果的引用 |
orderby | 对查询出的元素进行排序(ascending/descending) |
join | 按照两个指定匹配条件来Equals连接两个数据源 |
let | 产生一个用于存储查询表达式中的子表达式查询结果的范围变量 |
下面依此总结这8个关键字的常用查询语句写法。
1.from子句
如果要写一个LINQ表达式,就必须是以from子句开头。个人觉得from子句中需要注意的地方就是多个from子句的书写。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace LINQ { /// <summary> /// LINQ,重点是感悟from子句中的查询变量的灵活 /// </summary> class Program { static void Main(string[] args) { //1单个form子句 string[] values = { "LINQ学习","LINQ基本语句","from子句","单个from子句"}; var value = from v in values where v.IndexOf("LINQ") > -1 select new { v, v.Length }; foreach (var n in value) { Console.WriteLine("{0},{1}",n.v,n.Length ); } Console.ReadKey(false); //2使用LINQ查询ArrayList ArrayList gList = new ArrayList(); gList.Add(new GustInfo { Name="DebugLZQ", Age=26, Tel="88888888"}); gList.Add(new GustInfo { Name="博客园",Age=6, Tel ="666666"}); gList.Add(new GustInfo { Name = "M&MSoft", Age =9, Tel = "55555" }); var query = from GustInfo gust in gList where gust.Age > 9 select gust;//范围变量gust制定了数据类型 foreach (GustInfo g in query) { Console.WriteLine("{0} 年龄:{1} 电话:{2}",g.Name,g.Age,g.Tel ); } Console.ReadKey(false); //3复合from子句 List<GustInfo2> gList2 = new List<GustInfo2>() { new GustInfo2{ Name="DebugLZQ",Age=26,TelTable=new List<string>(){"8888888","138******"}}, new GustInfo2{ Name="博客园",Age=6,TelTable =new List<string>(){"666666","138******"}}, new GustInfo2{ Name="M&MSoft",Age=9,TelTable=new List<string>(){"55555","138******"}} }; //gust、tel都是查询变量,作用域为当前查询语句!!! var query2 = from gust in gList2 from tel in gust.TelTable where tel.IndexOf("5555") > -1 select gust; foreach (var g in query2) { Console.WriteLine("{0} 年龄{1}",g.Name,g.Age ); foreach (var t in g.TelTable) { Console.WriteLine("电话:{0}",t); } } Console.ReadKey(false); //4多个from子句 var query3 = from GustInfo gust in gList where gust.Age > 6 from GustInfo2 gust2 in gList2 where gust2.Age> 9 select new { gust, gust2 };//查询结果定制 foreach (var g in query3) { Console.WriteLine("{0} {1}", g.gust.Name, g.gust2.Name); } Console.ReadKey(false); } } }</div>
程序的运行结果如下:
程序中列举了from子句的用法示例,注意复合from子句和多个from子句的书写,同时需要理解范围变量和数据源变量这两个概念。
2.where子句
where子句,它是LINQ表达式的元素筛选机制,除了开始和结束的位置,它几乎可以出现在LINQ表达式的任意位置上。
在一个LINQ表达式中,可以有where子句,也可以没有;可以有一个,也可以有多个;多个where子句之间的逻辑关系相当于逻辑“与”,每个where子句可以包含1个或多个bool逻辑表达式,这些条件成为谓词,谓词逻辑之间用的是“&&”“||”等而不是SQL中的and 、or。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace LINQ_WHERE { /// <summary> /// LINQ where子句 /// </summary> class Program { static void Main(string[] args) { //1常见的where语句 List<GustInfo> gList = new List<GustInfo>() { new GustInfo(){ Name="DebugLZQ", Age=26,Tel="88888888"}, new GustInfo(){ Name="cnblogs",Age=6,Tel="666666"}, new GustInfo(){ Name="M&MSoft",Age=9,Tel="55555"} }; var query = from gust in gList where (gust.Name.Length > 7 || gust.Name.Substring(0, 1) == "M") && gust.Age > 9 select new { gust.Name, gust.Age }; foreach (var g in query) { Console.WriteLine("{0},{1}", g.Name, g.Age); } Console.ReadKey(false); //2.在where子句中使用自定义函数 var query2 = from GustInfo gust in gList where gust.Name.Length > 5 && Check(gust.Name) select gust; foreach (var g in query2) { Console.WriteLine("{0},{1},{2}", g.Name, g.Age, g.Tel); } Console.ReadKey(false); //3.动态谓词的筛选 //定义动态谓词数组,在实际开发中可以动态获得 string[] names = { "SB","XXX","***","@@@","一些敏感词"}; var query3 = from GustInfo guest in gList where !names.Contains(guest.Name) select guest; foreach (var q in query3) { Console.WriteLine("{0} 年龄:{1},电话:{2}",q.Name,q.Age,q.Tel ); } Console.ReadKey(false); } //自定义函数 static bool Check(string name) { if (name.Substring(0, 1) == "N") return false; return true; } } }</div>
需要注意一些常用的where子句的写法。程序的运行结果如下:
3.Select子句
在select子句上可以非常灵活的处理查询到的元素,然后再把结果返回。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace LINQ_select { /// <summary> /// LINQ select /// 在select子句上,可以非常灵活的处理查询到的元素,然后再把结果返回 /// </summary> class MyGustInfo { public string Name { get; set; } public int Age { get; set; } } class Program { static void Main(string[] args) { List<GustInfo> gList = new List<GustInfo>() { new GustInfo(){ Name="DebugLZQ", Age=25, Tel="88888888"}, new GustInfo(){ Name="cnblogs", Age=6, Tel="666666"}, new GustInfo(){ Name="M&M", Age=9, Tel="55555"} }; var query = from gust in gList where gust.Age >= 9 && gust.Age <= 30 select gust.Name.Replace("&", "mm");//se