首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 3.0 入門系列(五):Where 篩選進階——巢狀查詢、Distinct 與 First 單筆查詢

     編輯:關於C語言

巢狀查詢:群組內再篩選

LINQ 支援在 Select 投影中建立巢狀結構,外層物件的某個屬性本身就是一個子集合:

var q = from o in db.Orders
        select new {
            o.OrderID,
            DiscountedProducts = from od in o.OrderDetails
                                 where od.Discount > 0.0
                                 select od,
            FreeShippingDiscount = o.Freight
        };

回傳的每個訂單物件,其 DiscountedProducts 屬性包含一個「有折扣的明細」子集合。這在處理主從關係資料時極為方便。

Distinct 去重

要取得不重複的城市清單:

var q = (from c in db.Customers
         select c.City).Distinct();

對應的 SQL 為 SELECT DISTINCT City FROM Customers。

Where 篩選條件的多種寫法

基本篩選

// 查詢語法
var q = from c in db.Customers
        where c.City == "London"
        select c;

// 方法語法
var q = db.Customers.Where(c => c.City == "London");

複合條件(AND / OR)

// AND 條件
var q = from p in db.Products
        where p.UnitsInStock <= p.ReorderLevel && !p.Discontinued
        select p;

// OR 條件
var q = from p in db.Products
        where p.UnitPrice > 10m || p.Discontinued
        select p;

// 串聯 Where(等價於 AND)
var q = db.Products
          .Where(p => p.UnitPrice > 10m)
          .Where(p => p.Discontinued);

多個 Where 串聯或單一 Where 使用 &&,最終轉譯的 SQL 幾乎相同。

First / FirstOrDefault 單筆查詢

First 相當於 SQL 的 TOP 1,並立即執行查詢,回傳單一實體而非集合:

// 條件單筆查詢
Customer cust = db.Customers.First(c => c.CustomerID == "BONAP");
Order ord = db.Orders.First(o => o.Freight > 10.00M);

// 結合查詢語法
var q = (from c in db.Customers
         where c.City == "London"
         select c).First();

注意:First 必須以方法鏈結形式呼叫;若無符合條件資料會拋出例外,若需避免例外可改用 FirstOrDefault。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved