LINQ to SQL語句(1)Select查詢的九種形式

目錄

說明

與SQL命令中的select做用類似但位置不一樣,查詢表達式select放在表達式的末尾。並把字句中的變量也就是查詢結果返回回來。編輯器

簡單形式

var q = from c in db.Products select c.ProductName;

上述語句描述:實例返回產品名稱的序列。只是一個聲明而已,但沒有去查詢數據,會生成了SQL語句,只有當咱們須要該數據的時候,它纔會執行這條語句,這就是所謂的延遲加載。若是返回是對象的結果集,能夠用ToList()、ToArray()來保存該數據。spa

匿名類型形式

說明:匿名類型是C#3.0中的新特性。其本質是編輯器會自動生成一個匿名的類來存儲咱們的臨時變量。如:var person = new {Name="Jack",Age=15},編輯器會自動建立一個匿名類,這個類有兩個屬性Name和Age,而後根據數據初始化對象。code

  var t = from c in db.Products
                        select new
                        {
                            c.ProductName,
                            c.UnitPrice
                        };

上述語句描述:使用select和匿名類型返回產品的產品名稱、產品單價的序列。對象

 var a = from c in db.Employees
                        select new
                            {
                                Name = c.FirstName + c.LastName,
                                Phone = c.HomePhone

                            };

上述語句描述:使用select和匿名類型返回僱員的姓名和手機號碼的序列,並將FirstName和LastName合併爲一個字段Name,將HomePhone重命名爲Phoe。blog

條件形式

說明:生成SQL語句爲:case when condition then else。ip

var b = from c in db.Products
                        select new
                        {
                            c.ProductName,
                            State = c.UnitsInStock - c.UnitsOnOrder > 0 ? "Out Of Stock" : "In Stock"

                        };

上述語句描述:使用select和條件語句返回產品名稱和產品的供貨狀態的序列。ci

指定類型形式

說明:該形式返回你自定義類型的對象集。get

 var a = from c in db.Employees
                        select new Person
                            {
                                Name = c.FirstName,
                                Phone = c.HomePhone

                            };

上述語句描述:使用select和已知類型Person,返回姓名和手機號碼的序列。string

篩選形式

說明:結合Where起到篩選的做用。產品

   var d = from c in db.Products
                        where c.ProductName == "Aniseed Syrup" select c.UnitPrice;

上述語句說明:使用select和Where返回僅含產品名稱爲Aniseed Syrup的產品單價序列。

shaped形式

說明:select操做中使用了匿名對象,而在這個匿名對象中屬性也包含匿名對象。

 var e = from c in db.Orders
                        select new
                            {
                                c.OrderID,
                                c.OrderDate,
                                Customer = new { c.Customers.City, c.Customers.Address }

                            };

上述代碼描述:使用select返回訂單的ID、訂單時間、訂單客戶所在的城市和地址序列。

嵌套形式

 說明:返回每一個對象集中的DiscountedProducts屬性,而此屬性也是集合,也就是每一個對象的屬性結合。

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

上述代碼描述:使用嵌套查詢返回全部訂單的OrderID的序列、打折訂單中項目的子序列以及免送貨所省下的金額。

本地調用方法形式

說明:在本例查詢中,調用本地方法來判斷單價是否大於20,並返回信息。

var m = from g in db.Products.ToList()
                        select new
                            {
                                g.ProductID,
                                g.ProductName,
                                g.UnitPrice,
                                message = GetMessage(g.UnitPrice)

                            };

 GetMessage方法以下:

 public string GetMessage(Nullable<decimal> price)
        {
            if (price > 20)
            {
                return "單價大於20元";
            }
            else
            {
                return "單價小於20元";
            }
        }

 Distinct形式

說明:篩選不相同的值,用於查詢結果集中不重複的數據。

var k = (from j in db.Orders select j.ShipCity).Distinct();

 上述代碼描述:查詢訂單覆蓋的城市。

相關文章
相關標籤/搜索