共用方式為


HOW TO:編寫規劃 (LINQ to SQL)

更新: November 2007

下列範例顯示 C# 中的 select 陳述式和 Visual Basic 中的 Select 陳述式如何與其他功能結合,以構成查詢投影。

範例

下列範例使用 Visual Basic 中的 Select 子句 (C# 中的 select 子句),傳回 Customers 的連絡人名稱序列。

Dim nameQuery = From cust In db.Customers _
    Select cust.ContactName
var nameQuery =
    from cust in db.Customers
    select cust.ContactName;

下列範例使用 Visual Basic Select 中的子句 (C# 中的 select 子句) 和「匿名型別」(Anonymous Type),傳回 Customers 的連絡人名稱和電話號碼序列。

Dim infoQuery = From cust In db.Customers _
    Select cust.ContactName, cust.Phone
var infoQuery =
    from cust in db.Customers
    select new { cust.ContactName, cust.Phone };

下列範例使用 Visual Basic 中的 Select 子句 (C# 中的 select 子句) 和「匿名型別」,傳回員工的姓名和電話號碼序列。FirstName 和 LastName 欄位會合併成單一欄位 (Name),而在結果序列中 HomePhone 欄位會重新命名為 Phone。

Dim info2Query = From emp In db.Employees _
    Select Name = emp.FirstName & " " & emp.LastName, _
Phone = emp.HomePhone
var info2Query =
    from emp in db.Employees
    select new
    {
        Name = emp.FirstName + " " + emp.LastName,
        Phone = emp.HomePhone
    };

下列範例使用 Visual Basic 中的 Select 子句 (C# 中的 select 子句) 和「匿名型別」,傳回所有 ProductID 的序列和名為 HalfPrice 的計算值。此值設為 UnitPrice 除以 2。

Dim specialQuery = From prod In db.Products _
    Select prod.ProductID, HalfPrice = CDec(prod.UnitPrice) / 2
var specialQuery =
    from prod in db.Products
    select new { prod.ProductID, HalfPrice = prod.UnitPrice / 2 };

下列範例使用 Visual Basic 中的 Select 子句 (C# 中的 select 子句) 和「條件陳述式」(Conditional Statement),傳回產品名稱和產品可用性的序列。

Dim prodQuery = From prod In db.Products _
Select prod.ProductName, Availability = _
    If(prod.UnitsInStock - prod.UnitsOnOrder < 0, _
    "Out Of Stock", "In Stock")
var prodQuery =
    from prod in db.Products
    select new
    {
        prod.ProductName,
        Availability =
            prod.UnitsInStock - prod.UnitsOnOrder < 0
        ? "Out Of Stock" : "In Stock"
    };

下列範例使用 Visual Basic Select 子句 (C# 中的 select 子句) 和「已知型別」(Known Type) (Name),傳回員工姓名的序列。

Public Class Name
    Public FirstName As String
    Public LastName As String
End Class

Dim db As New Northwnd("c:\northwnd.mdf")
Dim empQuery = From emp In db.Employees _
    Select New Name With {.FirstName = emp.FirstName, .LastName = _
        emp.LastName}
public class Name
{
    public string FirstName = "";
    public string LastName = "";
}

 void empMethod()
 {
 Northwnd db = new Northwnd(@"c:\northwnd.mdf");
 var empQuery =
     from emp in db.Employees
     select new Name
     {
         FirstName = emp.FirstName,
         LastName = emp.LastName
     };
}

下列範例使用 Visual Basic 中的 Select 和 Where (C# 中的 select 和 where),傳回倫敦客戶之連絡人名稱的「篩選序列」(Filtered Sequence)。

Dim contactQuery = _
    From cust In db.Customers _
    Where cust.City = "London" _
    Select cust.ContactName
var contactQuery =
    from cust in db.Customers
    where cust.City == "London"
    select cust.ContactName;

下列範例使用 Visual Basic 中的 Select 子句 (C# 中的 select 子句) 和「匿名型別」,傳回客戶相關資料的「合適子集」(Shaped Subset)。

Dim custQuery = From cust In db.Customers _
    Select cust.CustomerID, CompanyInfo = New With {cust.CompanyName, _
        cust.City, cust.Country}, ContactInfo = _
        New With {cust.ContactName, cust.ContactTitle}
var custQuery =
    from cust in db.Customers
    select new
    {
        cust.CustomerID,
        CompanyInfo = new { cust.CompanyName, cust.City, cust.Country },
        ContactInfo = new { cust.ContactName, cust.ContactTitle }
    };

下列範例使用巢狀查詢,傳回下列結果:

  • 所有訂單與其對應 OrderID 的序列。

  • 訂單中有折扣之項目的序列。

  • 不包含運送成本時所節省的金額。

Dim ordQuery = From ord In db.Orders _
    Select ord.OrderID, DiscountedProducts = _
    (From od In ord.OrderDetails _
        Where od.Discount > 0.0 _
    Select od), _
FreeShippingDiscount = ord.Freight
var ordQuery =
    from ord in db.Orders
    select new
    {
        ord.OrderID,
        DiscountedProducts =
            from od in ord.OrderDetails
            where od.Discount > 0.0
            select od,
        FreeShippingDiscount = ord.Freight
    };

請參閱

其他資源

查詢範例 (LINQ to SQL)