LINQ查询操作符之Select、Where、OrderBy、OrderByDescending、GroupBy、Join、GroupJoin及其对应的查询语法
介绍
·Select - Select选择;延迟
·Where - Where查询;延迟
·OrderBy - 按指定表达式对集合正序排序;延迟
·OrderByDescending - 按指定表达式对集合倒序排序;延迟
·GroupBy - 分组;延迟
·Join - Join查询;延迟
·GroupJoin - 分组Join查询;延迟
·以上查询操作符所对应的查询语法
示例
1 Summary.aspx.cs 2 3 using System; 4 using System.Data; 5 using System.Configuration; 6 using System.Collections; 7 using System.Linq; 8 using System.Web; 9 using System.Web.Security; 10 using System.Web.UI; 11 using System.Web.UI.WebControls; 12 using System.Web.UI.WebControls.WebParts; 13 using System.Web.UI.HtmlControls; 14 using System.Xml.Linq; 15 16 using System.Collections.Generic; 17 using DAL; 18 19 public partial class LINQ_Summary : System.Web.UI.Page 20 { 21 NorthwindDataContext _ctx = new NorthwindDataContext(); 22 string[] _ary = null; 23 24 protected void Page_Load(object sender, EventArgs e) 25 { 26 _ary = new string[] { "asp.net", "csharp", "xhtml", "css", "javascript", 27 "wcf", "wpf", "silverlight", "linq", "wf", 28 "sqlserver", "asp.net ajax", "ssis", "ssas", "ssrs" }; 29 30 // Select - Select选择;延迟 31 Summary_Select(); 32 33 // Where - Where查询;延迟 34 Summary_Where(); 35 36 // OrderBy - 按指定表达式对集合正序排序;延迟 37 // OrderByDescending - 按指定表达式对集合倒序排序;延迟 38 Summary_OrderBy_OrderByDescending(); 39 40 // GroupBy - 分组;延迟 41 Summary_GroupBy(); 42 43 // Join - Join查询;延迟 44 Summary_Join(); 45 46 // GroupJoin - 分组Join查询;延迟 47 Summary_GroupJoin(); 48 } 49 }
Select - Select选择;延迟
1 /// <summary> 2 /// Select - Select选择;延迟 3 /// </summary> 4 void Summary_Select() 5 { 6 // 使用Select查询操作符 7 var categories = _ctx.Categories.Select( 8 c => new { CategoryName = "类别名称:" + c.CategoryName }); 9 10 foreach (var c in categories) 11 { 12 result.InnerHtml += c.CategoryName + "<br />"; 13 } 14 result.InnerHtml += "<br />"; 15 16 17 // 与上面的Select查询操作符相对应的查询语法 18 var categories2 = from c in _ctx.Categories 19 select new { CategoryName = "类别名称:" + c.CategoryName }; 20 21 foreach (var c in categories2) 22 { 23 result.InnerHtml += c.CategoryName + "<br />"; 24 } 25 result.InnerHtml += "<br />"; 26 }
运行结果
类别名称:Beverages
类别名称:Condiments
类别名称:Confections
类别名称:Dairy Products
类别名称:Grains/Cereals
类别名称:Meat/Poultry
类别名称:Produce
类别名称:Seafood
Where - Where查询;延迟
1 //// <summary> 2 /// Where - Where查询;延迟 3 /// </summary> 4 void Summary_Where() 5 { 6 // 使用Where查询操作符 7 var ary = _ary.Where(a => a.StartsWith("w") && a.EndsWith("f")); 8 9 foreach (string s in ary) 10 { 11 result.InnerHtml += s + "<br />"; 12 } 13 result.InnerHtml += "<br />"; 14 15 16 // 与上面的Where查询操作符相对应的查询语法 17 var ary2 = from a in _ary 18 where a.StartsWith("w") && a.EndsWith("f") 19 select a; 20 21 foreach (string s in ary2) 22 { 23 result.InnerHtml += s + "<br />"; 24 } 25 result.InnerHtml += "<br />"; 26 }
运行结果
wcf
wpf
wf
OrderBy - 按指定表达式对集合正序排序;延迟
OrderByDescending - 按指定表达式对集合倒序排序;延迟
1 /// <summary> 2 /// OrderBy - 按指定表达式对集合正序排序;延迟 3 /// OrderByDescending - 按指定表达式对集合倒序排序;延迟 4 /// </summary> 5 void Summary_OrderBy_OrderByDescending() 6 { 7 // 使用OrderBy查询操作符 8 var ary = (from a in _ary 9 select a).OrderBy(a => a.Length); // OrderByDescending与OrderBy用法相同 10 11 foreach (string s in ary) 12 { 13 result.InnerHtml += s + "<br />"; 14 } 15 result.InnerHtml += "<br />"; 16 17 18 // 与上面的OrderBy查询操作符相对应的查询语法 19 var ary2 = from a in _ary 20 orderby a.Length ascending // orderby xxx descending与orderby xxx ascending用法相同 21 select a; 22 23 foreach (string s in ary2) 24 { 25 result.InnerHtml += s + "<br />"; 26 } 27 result.InnerHtml += "<br />"; 28 }
运行结果
wf
css
wcf
wpf
linq
ssis
ssas
ssrs
xhtml
csharp
asp.net
sqlserver
javascript
silverlight
asp.net ajax
GroupBy - 分组;延迟
1 /// <summary> 2 /// GroupBy - 分组;延迟 3 /// </summary> 4 void Summary_GroupBy() 5 { 6 // 使用GroupBy查询操作符 7 var list = (from a in _ary 8 select a).GroupBy(a => a.Length).Select( 9 g => new { Group = g.Key, Member = g }); 10 11 foreach (var g in list) 12 { 13 result.InnerHtml += g.Group + "个字符:<br />"; 14 15 foreach (string s in g.Member) 16 { 17 result.InnerHtml += "--" + s + "<br />"; 18 } 19 } 20 result.InnerHtml += "<br />"; 21 22 23 // 与上面的GroupBy查询操作符相对应的查询语法 24 var list2 = from a in _ary 25 group a by a.Length into g 26 select new { Group = g.Key, Member = g }; 27 28 foreach (var g in list2) 29 { 30 result.InnerHtml += g.Group + "个字符:<br />"; 31 32 foreach (string s in g.Member) 33 { 34 result.InnerHtml += "--" + s + "<br />"; 35 } 36 } 37 result.InnerHtml += "<br />"; 38 }
运行结果
7个字符:
--asp.net
6个字符:
--csharp
5个字符:
--xhtml
3个字符:
--css
--wcf
--wpf
10个字符:
--javascript
11个字符:
--silverlight
4个字符:
--linq
--ssis
--ssas
--ssrs
2个字符:
--wf
9个字符:
--sqlserver
12个字符:
--asp.net ajax
Join - Join查询;延迟
1 /// <summary> 2 /// Join - Join查询;延迟 3 /// </summary> 4 void Summary_Join() 5 { 6 // 使用Join查询操作符 7 var products = _ctx.Products.Join( 8 _ctx.Categories, 9 p => p.CategoryID, 10 c => c.CategoryID, 11 (p, c) => new { c.CategoryName, p.ProductName }).Take(5); 12 13 foreach (var p in products) 14 { 15 result.InnerHtml += p.CategoryName + " - " + p.ProductName + "<br />"; 16 } 17 result.InnerHtml += "<br />"; 18 19 20 // 与上面的Join查询操作符相对应的查询语法 21 var products2 = (from p in _ctx.Products 22 join c in _ctx.Categories 23 on p.CategoryID equals c.CategoryID 24 select new { c.CategoryName, p.ProductName }).Take(5); 25 26 foreach (var p in products2) 27 { 28 result.InnerHtml += p.CategoryName + " - " + p.ProductName + "<br />"; 29 } 30 result.InnerHtml += "<br />"; 31 }
运行结果
Beverages - Chai
Beverages - Chang
Condiments - Aniseed Syrup
Condiments - Chef Anton's Cajun Seasoning
Condiments - Chef Anton's Gumbo Mix
GroupJoin - 分组Join查询;延迟
1 /// <summary> 2 /// GroupJoin - 分组Join查询;延迟 3 /// </summary> 4 void Summary_GroupJoin() 5 { 6 // 使用GroupJoin查询操作符 7 var products = _ctx.Categories.GroupJoin( 8 _ctx.Products, 9 c => c.CategoryID, 10 p => p.CategoryID, 11 (p, g) => new { p.CategoryName, ProductCount = g.Count() }); 12 13 foreach (var g in products) 14 { 15 result.InnerHtml += g.CategoryName + ":" + g.ProductCount + "<br />"; 16 17 } 18 result.InnerHtml += "<br />"; 19 20 21 // 与上面的GroupJoin查询操作符相对应的查询语法 22 var products2 = from c in _ctx.Categories 23 join p in _ctx.Products on c.CategoryID equals p.CategoryID into g 24 select new { CategoryName = c.CategoryName, ProductCount = g.Count() }; 25 26 27 foreach (var g in products2) 28 { 29 result.InnerHtml += g.CategoryName + ":" + g.ProductCount + "<br />"; 30 31 } 32 result.InnerHtml += "<br />"; 33 }
运行结果
Beverages:12
Condiments:12
Confections:13
Dairy Products:10
Grains/Cereals:7
Meat/Poultry:6
Produce:5
Seafood:12