C#3.0入門系列(五)-之Where操作

來源:互聯網
上載者:User
從本節開始,本文正式更名為C#3.0入門系列。先發布一則訊息,VS2007 Beta版本已經發布咯,:
http://www.microsoft.com/downloads/details.aspx?FamilyID=1FF0B35D-0C4A-40B4-915A-5331E11C39E6&displaylang=en
大家快去下載呀,我也好和大家一起體驗該版本最新功能呀。
dlinq也更名為linq to sql.本文也跟著做相應變化,稍候,我會去更新前面的文章。我們先接著講linq的文法。
Select操作
最簡單的1,            var q =
                from c in db.Customers
                select c.ContactName;

匿名類的1,            var q =
                from c in db.Customers
                select new {c.ContactName, c.Phone};
2,            var q =
                from e in db.Employees
                select new {Name = e.FirstName + " " + e.LastName, Phone = e.HomePhone};
3,            var q =
                from p in db.Products
                select new {p.ProductID, HalfPrice = p.UnitPrice / 2};

條件的            var q =
                from p in db.Products
                select new {p.ProductName, Availability = p.UnitsInStock - p.UnitsOnOrder < 0 ? "Out Of Stock": "In Stock"};

這種條件的會被翻譯成sql中{case when condition then else}的。
name type形式的:            var q =
                from e in db.Employees                
                select new Name {FirstName = e.FirstName, LastName = e.LastName};

只所以是name type的,是因為Name類是已經定義好的,也就是說,你可以用這種方式,返回你需要類型的對象集.
shaped形式的:

            var q =
                from c in db.Customers
                select new {
                    c.CustomerID,
                    CompanyInfo = new {c.CompanyName, c.City, c.Country},
                    ContactInfo = new {c.ContactName, c.ContactTitle}
                };

該形式,其select操作使用了匿名對象,而這個匿名對象中,其屬性也是個匿名對象。
nested形式的:            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();

該形式,篩選該欄位中不相同的值。會被翻譯為
select distinct city from customers

where操作:
最簡單的

1,            var q =
                from c in db.Customers
                where c.City == "London"
                select c;

2,            var q =
                from e in db.Employees
                where e.HireDate >= new DateTime(1994, 1, 1)
                select e;

或與關係的where條件

1,            var q =
                from p in db.Products
                where p.UnitsInStock <= p.ReorderLevel && !p.Discontinued
                select p;
2,            var q =
                from p in db.Products
                where p.UnitPrice > 10m || p.Discontinued
                select p;
3,            var q =
                db.Products.Where(p=>p.UnitPrice > 10m).Where(p=>p.Discontinued);

在上例中,1和2語句先被翻譯成類似3語句的形式,再被翻譯成sql語句,送回資料服務器。他們基本上一樣的。
欠套在first操作中的where條件:
first操作,其實質就是在sql語句前,加了一個top 1.1,            Customer cust = db.Customers.First(c => c.CustomerID == "BONAP");
2            Order ord = db.Orders.First(o => o.Freight > 10.00M);

第一個例子,是篩選customerid為"BONAP"的客戶,第二個篩選訂單運費大於10的訂單。First操作必須用這種級連的形式。比如

Shipper shipper = db.Shippers.First();

也可以把linq的expression和級連的形式混合使用,比如第一個例子,加入first操作,

            var q =
                (from c in db.Customers
                where c.City == "London"
                select c).First();

如果加入first操作,其返回是一個具體的對象,而不是一個集合。如果first操作沒有條件,它只是簡單的在sql語句中添加top 1,如果有條件,它在翻譯時,就會加入條件陳述式。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.