LINQ statement query
Linq query expression is a very important part of linq , it can retrieve data from one or more given data sources, and specify the data type and representation of the retrieved results. A linq query expression consists of one or more linq query clauses according to certain rules. The eight statement expressions of linq query include from clause, where clause, select clause, orderby clause, group clause, into clause, join clause, and let clause. Divided into simple query, complex query, aggregation query, group query.from... clause: specifies the data source and scope variables for the query operation
E.g:
int[] values = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; var value = from v in values where v < 6 select v; Response.Write("Query result: <br>"); foreach (var v in value) { Response.Write(v.ToString() + "<br>"); }
select clause: specify the type and representation of query results
E.g:
int[] values = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; var value = from v in values where v < 4 select v; Response.Write("Query result: <br>"); foreach (var v in value) { Response.Write(v.ToString() + "<br>"); }
where clause: logical conditions for filtering elements, generally composed of logical operators
E.g:
int[] values = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; var value = from v in values where v < 9 && v > 6 select v; Response.Write("Query result: <br>"); foreach (var v in value) { Response.Write(v.ToString() + "<br>"); }
group..by clause: group the query
E.g:
protected void Page_Load(object sender, EventArgs e) { int[] values = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; var value = from v in values group v by v % 2 == 0; ; // output query result foreach (var i in value) { foreach (int j in i) { Response.Write(j + "<br>"); } } }
order...by clause: Sort the query results, which can be ascending or descending order.
E.g:
protected void Page_Load(object sender, EventArgs e) { int[] values = { 5, 8, 3, 4, 1, 6, 7, 2, 9, 0 }; var value = from v in values where v < 3 || v > 6 orderby v descending select v; // output query result foreach (var i in value) { Response.Write(i + "<br>"); } }
into clause: provide a temporary identifier from when the result of a join, group or select clause
E.g:
protected void Page_Load(object sender, EventArgs e) { int[] values = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; var value = from v in values group v by v % 2 == 0 into g where g.Max() > 8 //After grouping, find groups greater than 8 in the group select g; // output query result foreach (var i in value) { foreach (int j in i) { Response.Write(j + "<br>"); } } }
join clause: joins data sources for multiple query operations
E.g:
private void InnerJoinQuery() 2 { 3 4 List<UserBaseInfo> users = new List<UserBaseInfo>(); 5 List<RoleInfo> roles = new List<RoleInfo>(); 6 7 8 for (int i = 1; i < 10; i++) 9 { 10 users.Add(new UserBaseInfo(i, "users0" + i.ToString(), "user0" + i.ToString() + "@web.com", i * 2)); 11 roles.Add(new RoleInfo(i, "RoleName0" + i.ToString())); 12 } 13 14 //The query ID value is less than 9, and the role includes users in roles 15 var result = from u in users 16 join r in roles on u.RoleId equals r.ID 17 18 where u.ID < 9 19 select u; 20 21 foreach (var u in result) 22 { 23 24 Response.Write(u.UserName + "</br>"); 25 26 } 27 }
let clause: introduce a scope variable for storing the result of a self-expression in a query expression
E.g:
private void LetQuery() 2 { 3 4 List<UserBaseInfo> users = new List<UserBaseInfo>(); 5 6 for(int i=1;i<10;i++) 7 { 8 users.Add(new UserBaseInfo(i,"users0"+i.ToString(),"user0"+i.ToString()+"@web.com")); 9 } 10 11 var result = from u in users 12 let number= Int32.Parse(u.UserName.Substring(u.UserName.Length - 2)) 13 group u by number % 2 == 0 into g 14 15 where g.Count() < 5 16 17 select g; 18 19 foreach (var v in result) 20 { 21 foreach (UserBaseInfo u in v) 22 { 23 Response.Write(u.UserName + "</br>"); 24 } 25 } 26 }