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

LINQ to SQL Select 操作核心:延遲載入、Lambda 表達式、匿名型別與物件初始化器

     編輯:關於C#

最簡單查詢與延遲載入


var q = from c in db.Customers select c.ContactName; // 僅宣告,未執行
// 需要資料時才查詢:
var list = q.ToList(); // 或 ToArray()

延遲載入:只有在枚舉結果時才發送 SQL。

查詢運算式轉換為方法鏈


// 查詢運算式
var q = from c in db.Customers where c.City == "London" select c;
// 自動轉換為
var q = db.Customers.Where(c => c.City == "London").Select(c => c);

兩者等價。方法鏈中操作符順序不影響結果,但查詢運算式 select 必須在最後。

Lambda 表達式 c => c.City == "London" 解析

  • c:隱含型別參數,編譯器依 Customers 推斷為 Customer 型別
  • =>:Lambda 運算子
  • c.City == "London":運算式本體,回傳 bool
  • 等同顯式型別:(Customer c) => c.City == "London"

本質是匿名方法簡化形式,編譯器自動推斷型別。

資料即物件:物件關聯映射核心觀念

  1. Table Schema → Class:資料表結構對應類別定義
  2. Data → Object:資料列對應物件實例

Lambda 參數 c 即代表結果集中的單一 Customer 物件。

匿名型別與物件初始化器

基本形式


select new { c.ContactName, c.Phone }
// 編譯器自動產生含 ContactName、Phone 屬性的匿名類別

屬性重新命名


select new { Name = e.FirstName + " " + e.LastName, Phone = e.HomePhone }

混合形式


select new { p.ProductID, HalfPrice = p.UnitPrice / 2 }

物件初始化器語法


var d = new Person { Name = "s" }; // 不需建構函式,直接設定屬性
var d = new { Name = "s" };        // 匿名型別:編譯器產生類別並初始化

注意:var d = new { "s" } 編譯失敗(無屬性名),但 string c = "d"; var d = new { c } 成功(屬性名為 c)。

var 關鍵字:非弱型別

var 為編譯器關鍵字,編譯期依指派值推斷型別。var c = null 無法編譯(無法推斷)。C# 3.0 仍為強型別語言。

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