select子句:指定查询结果的类型和表现形式
where子句:筛选元素的逻辑条件,一般由逻辑运算符组成
group … by子句:对查询进行分组
orderby子句:对查询结果进行排序,可以为“升序”或“降序”
join子句:连接多个查询操作的数据源
let子句:引入用于存储查询表达式中的子表达式结果的范围变量
into子句:提供一个临时标示符,充当对join、group或select子句的结果
- from子句
LINQ查询表达式必须包含from子句,且以from开头。如果该查询表达式还包含子查询,那么子查询表达式也必须以from子句开头。
//创建linqDB数据库上下文实例 LinqDBDataContext DB = new LinqDBDataContext(); //linqtosql 查询结果 //使用from …in子句 var query = from user in DB.UserInfo where user.ID < 5 select user; //指定数据源 GridView1.DataSource = query; //绑定数据源 GridView1.DataBind();
- where子句
where子句指定筛选元素的逻辑条件,一般由逻辑运算符(如逻辑“与”,逻辑“或”)组成,一个查询表达式可以不包含where子句,也可以包含一个或多个where子句。在where子句中可以使用&&和||运算符来连接where子句中的多个布尔条件表达式。但是where子句不能作为查询表达式的第一个和最后一个子句。
//创建linqDB数据库上下文实例 LinqDBDataContext DB = new LinqDBDataContext(); //linqtosql 查询结果 //使用from …in子句 var query = from user in DB.UserInfo //where子句筛选user.ID < 5的结果 where user.ID < 5 //select语句指定查询结果 select user; //指定数据源 GridView1.DataSource = query; //绑定数据源 GridView1.DataBind();
- select子句
select子句指定查询结果的类型和表现形式。LINQ查询表达式必须以select子句结束或group子句结束,否则会给出错误提示。
- group子句
group子句对查询的结果进行分组,并返回元素类型为IGrouping<TKE,TElement>的对象序列。
//创建linqDB数据库上下文实例 LinqDBDataContext DB = new LinqDBDataContext(); //linq分组 var query = from res in (from user in DB.UserInfo join order in DB.Order on user.ID equals order.UserId select new { ID = user.ID, Name = user.Username } ) //使用group…by进行分组 group res by res.ID; foreach (var item in query) { //创建GV GridView gridView = new GridView(); //设置GV的id属性 gridView.DataSource = item; gridView.DataBind(); //添加html元素 Page.Form.Controls.Add(gridView); }
- orderby子句
orderby子句可以对查询结果进行排序。排序方式可以为“升序”或“降序”,且排序的键可以为一个或多个。LINQ查询表达式对查询的结果的默认排序方式为“升序”。
LinqDBDataContext DB = new LinqDBDataContext(); var query = from user in DB.UserInfo join role in DB.UserRole on user.ID equals role.UserID where user.ID < 5 && user.Username.Length >= 3 //使用orderby子句进行查询结果排序 orderby user.Username descending select new { ID = user.ID, Name = user.Username, Role = role.Role.RoleName }; GridView1.DataSource = query; GridView1.DataBind();
- into子句
into子句可以创建一个临时标识符,使用该标识符可以存储group、join、select子句的结果。
var groups = from word in words orderby word ascending group word by word.Length into lengthGroups orderby lengthGroups.Key descending select new { Length = lengthGroups.Key, Words = lengthGroups };
- join子句
join子句可以设置两个数据源之间的关系。这两个数据源之间必须存在关联的属性或值。
LinqDBDataContext DB = new LinqDBDataContext(); var query = from user in DB.UserInfo
//使用join连接role 表和user表
join role in DB.UserRole on user.ID equals role.UserID where user.ID < 5 && user.Username.Length >= 3
//使用orderby子句进行查询结果排序
orderby user.Username descending
select new { ID = user.ID, Name = user.Username, Role = role.Role.RoleName };
GridView1.DataSource = query;
GridView1.DataBind();
1、 内部联接:元素的连接关系必须同时满足被联接的两个数据源。
2、 分组联接:含有into子句的join子句。
3、 左外部联接:返回第一个集合中的每一个元素,不管第二个集合中是否具有相关元素。
- let子句
let子句可以创建一个新的范围变量,并且使用该变量保存表达式中的结果。let子句指定范围变量的值通过初始化操作进行赋值,范围变量的值一但被初始化,将不能再被改变。
//使用let子句创建范围变量g,并通过g构建查询表达式 var query = from guest in gList let g = guest.Name.Substring(0, 1) where g == "D" || g == "J" select guest;