Linq的一些基礎查詢

  其中包括對數據中經常使用的條件查詢,投影,分區,排序,分組,集合,元素,量詞,和集集等標準查詢操做符進行分類介紹翻譯

  一.條件操做符對象

  條件操做符where相似於SQL中的where子句,用於實現條件查詢。下列擴張方法表達式查詢知足條件「角色不能爲null」的用戶集合;blog

  var user = db.Users.Where(o => o.Roles != null);排序

  =====>接口

  var users=from 0 in db.Usersip

        where o.Roles != null編譯器

        select o;博客

 

  二.投影操做符io

  投影操做符Select 相似於SQL中的Select子句,將對象投影爲一個匿名實例,用於控制制定查詢迭代器顯示或者處理的對象屬性。另外,須要注意的是,擴展方法表達式中的Select操做符並不是必要的,省略模式下,會返回完整的被投影對象。下列擴展方法表達式將用戶的帳號和密碼信息投影爲一個匿名類型:編譯

  var users=db.Users.Select(o=>new{ o.Account,o.Password});

  =======>

  var users=from o in db.Users

        select new {o.Account,o.Password};

 

  三.分區操做符

  分區操做符實現對象的分區操做,其中,Take操做符相似於SQL中的Top操做符,下列擴展方法表達式返回前5個用戶對象:

  var users=db.Users.OrderBy(o=>o.Roles.Count).Take(5);

  

  Skip操做符用於跳過指定個數對象並防禦序列中的剩餘對象,下列擴展方法表達式返回除前10個用戶外的剩餘用戶:

  var users=db.Users.OrderBy(o=>o.Roles.Count).Skip(10);

 

  TakeWhile 操做符用於返回條件表達式值爲真時的相鄰元素集合, 下列擴展方法表達式返回第一個擁有 3 個角色的用戶以前的全部用戶集合:

  var users = db.Users.OrderBy(o => o.Roles.Count).TakeWhile(o => o.Roles.Count == 3);

 

  SkipWhile 操做符用於跳過條件表達式值爲真時的元素,並返回剩下的元素集合,下列擴展方法表達式返回第一個擁有 3 個角色的用戶以後的全部用戶集合:

  var users = db.Users.OrderBy(o => o.Roles.Count).SkipWhile(o => o.Roles == 3);

 

  四.排序操做符

  排序操做符實現對象的排序功能,包括 OrderBy、OrderByDescending、ThenBy、ThenByDescending 和 Reverse 五個操做符。其中 OrderBy 操做符實現對象的升序排列,至關於 SQL 中的 ORDER BY ASC 子句,下列擴展方法表達式實現用戶按擁有的角色數進行升序排列:

  var users = db.Users.OrderBy(o => o.Roles.Count);

  對應的標準查詢操做符表達式爲:

  var users = from o in db.Users

        orderby o.Roles.Count
        select o;

  

  OrderByDescending 操做符實現對象的降序排列, 至關於 SQL中的 ORDER BY DESC子句,下列擴展方法表達式實現用戶按擁有的角色數進行降序排列:

  var users = db.Users.OrderByDescending(o => o.Roles.Count);

  對應的標準查詢操做符表達式爲:

  var users = from o in db.Users

        orderby o.Roles.Count descending
        select o;

  ThenBy、ThenByDescending 和 Reverse 操做符只能針對 IOrderedEnumerable 接口對象使用,因此通常緊跟在 OrderBy/OrderByDesending 操做符方法後使用。ThenBy 操做符由編譯器翻譯爲對 OrderBy 操做符的再次調用;ThenByDescending 操做符由編譯器翻譯爲對 OrderByDescending 操做符的再次調用;Reverse 操做符實現對象的排序反向。這裏再也不一一舉例。

 

  五.分組操做符

  分組操做符 GroupBy 相似於 SQL 中的 GROUP BY 子句,實現對象的分組操做。下列擴展方法表達式實現用戶對象按擁有的角色數量進行分組:

  var users = db.Users.GroupBy(o => o.Roles.Count);

  對應的標準查詢操做符表達式爲:

  var users = from o in db.Users

        group o by o.Roles.Count into g

        select new { RoleCount = g.Key, Group = g };

 

   6、集合操做符

  集合操做符包括 Distinct、Union、intersect 和 Except 四個操做符,除 Distinct 外,其餘三個操做符均可將兩個序列組合成一個序列。 Distinct 操做符相似於 SQL 中的 DISTINCT關鍵字, 用於刪除序列中具備重複值的對象。 下列擴展方法表達式實現將用戶角色中的重複角色刪除功能:

  var roles = user.Roles.Distinct();

  

  Union 操做符相似於 SQL 中的 UNION 關鍵字,用於求具備一樣結構的兩個序列的並集。下列擴展方法表達式實現將用戶 1 和用戶 2 所擁有的角色組合成一個角色集合,並排除其中重複的角色:

  var roles = user1.Roles.Union(user2.Roles);

  

  Intersect 操做符相似於 SQL 中的 INTERSECT 關鍵字, 用於求具備一樣結構的兩個序列的交集。下列擴展方法表達式返回用戶 1 和用戶 2 都具備的角色集合:

  var roles = user1.Roles.Intersect(user2.Roles);

  

  Except 操做符相似於 SQL 中的 EXCEPT 關鍵字,用於返回第一個序列中有、但第二個序列中沒有的對象集合。下列擴展方法表達式返回用戶 1 擁有,而用戶 2 沒有的角色集合:

  var roles = user1.Roles.Except(user2.Roles);

  

  七.元素操做符

  元素操做符包括兩組操做符,分別是用於從一個 IEnumerable<T>序列中返回知足條件的單個對象或無知足條件對象時拋異常的 First、Last 和 Single 操做符,以及返回知足條件的單個對象或無知足條件對象時返回空對象的 FirstOrDefault、LastOrDefault 和SingleOrDefault 操做符。其中 First 和 FirstOrDefault 操做符用於返回第一個知足條件的對象。下列擴展方法表達式返回第一個擁有三個角色的用戶

  var user = db.Users.FirstOrDefault(o => o.Roles.Count == 3);

 

  Last 和 LastOrDefault 操做符用於返回最後一個知足條件的對象。 下列擴展方法表達式返回最後一個擁有三個角色的用戶:

  var user = db.Users.LastOrDefault(o => o.Roles.Count == 3);

 

  Single 和 SingleOrDefault 操做符用於返回知足條件的序列中的惟一元素,若是序列中包含不止一個元素,將會拋異常。下列擴展方法表達式返回賬號爲「Apollo」的惟一用戶,若是有多個用戶賬號都爲「Apollo」 ,則拋異常:

  var user = db.Users.SingleOrDefault(o => o.Account == "Apollo");

 

  八.量詞操做符

  量詞操做符包括 Any、All 和 Contains 三個操做符,用於檢查序列中是否有一些對象或全部對象知足條件。其中,Any 操做符用於檢查序列中是否有任何一個對象知足條件。下列擴展方法表達式當有任何一個用戶擁有三個角色時返回真,不然返回假:

  var result = db.Users.Any(o => o.Roles.Count == 3);

  

  All 操做符用於檢查序列中是否全部對象均知足條件。下列擴展方法表達式當全部用戶均擁有三個角色時返回真,不然返回假:

  var result = db.Users.All(o => o.Roles.Count == 3);

 

  Contains 操做符用於檢查序列中是否包含指定的對象。下列擴展方法表達式當集合中包含用戶 1 則返回真,不然返回假:

  var result = db.Users.Where(o => o.Roles.Count == 3).Contains(user1);

  

  九.彙集操做符

  彙集操做符包括 Count、Min、Max、Sum 和 Average 等多個操做符,用於對對象集合進行統計計算。其中,Count 操做符相似於 SQL 中的 COUNT 關鍵字,用於計算序列中知足條件的對象個數。下列擴展方法表達式返回擁有 3 個角色的用戶數量:

  var result = db.Users.Count(o => o.Roles.Count == 3);

 

  Min 操做符相似於 SQL 中的 MIN 關鍵字,用於返回按條件計算的最小值。下列擴展方法表達式返回擁有最少角色數量的用戶所擁有的角色數量:

  var result = db.Users.Min(o => o.Roles.Count);

  

  Max 操做符相似於 SQL 中的 MAX 關鍵字,用於返回按條件計算的最大值。下列擴展方法表達式返回擁有角色數量最多的用戶所擁有的角色數量:

  var result = db.Users.Max(o => o.Roles.Count);

  

  Sum 操做符相似於 SQL 中的 SUM 關鍵字,用於返回按條件計算的總數。下列擴展方法表達式返回已賦予用戶的全部角色總數:

  var result = db.Users.Sum(o => o.Roles.Count);

 

  Average 操做符相似於 SQL 中的 AVERAGE 關鍵字,用於返回按條件計算的平均值。下列擴展方法表達式,用於返回用戶所擁有的角色平均數:

  var result = db.Users.Average(o => o.Roles.Count);

 

 

  本文內容來自:藝林博客:http://yilin.cnblogs.com/ 

相關文章
相關標籤/搜索