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

转载 2007年09月28日 16:53:00
从本节开始,本文正式更名为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操作
最简单的
,            var q =
                from c 
in db.Customers
                select c.ContactName;
匿名类的
,            var q =
                from c 
in db.Customers
                select 
new {c.ContactName, c.Phone};
,            var q =
                from e 
in db.Employees
                select 
new {Name = e.FirstName + " " + e.LastName, Phone = e.HomePhone};
,            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操作:
最简单的
,            var q =
                from c 
in db.Customers
                where c.City 
== "London"
                select c;

,            var q =
                from e 
in db.Employees
                where e.HireDate 
>= new DateTime(199411)
                select e;
或与关系的where条件
,            var q =
                from p 
in db.Products
                where p.UnitsInStock 
<= p.ReorderLevel && !p.Discontinued
                select p;
,            var q =
                from p 
in db.Products
                where p.UnitPrice 
> 10m || p.Discontinued
                select p;
,            var q =
                db.Products.Where(p
=>p.UnitPrice > 10m).Where(p=>p.Discontinued);
在上例中,1和2语句先被翻译成类似3语句的形式,再被翻译成sql语句,送回数据服务器。他们基本上一样的。
欠套在first操作中的where条件:
first操作,其实质就是在sql语句前,加了一个top 1.
,            Customer cust = db.Customers.First(c => c.CustomerID == "BONAP");
            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,如果有条件,它在翻译时,就会加入条件语句。  

USB入门系列总结

USB是什么呢?一说USB是You SB的意思,即“你傻B”的意思。另一种说法是USB其实是美国的弟弟,因为美国叫USA,USB当然是他的弟弟了。     那么USB到底是什么呢?其实USB是通...
  • u013916997
  • u013916997
  • 2014年05月27日 17:09
  • 852

git干货系列:(五)多人协同工作之分支管理

分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习 Git 的时候,另一个你正在另一个平行宇宙里努力学习 SVN 。如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇...
  • AlbertFly
  • AlbertFly
  • 2017年03月18日 21:52
  • 328

神经网络入门(连载之五)

游戏编程中的人工智能技术 ( 连载之五 ) 4.5 神经网络的编码(Encoding the Network)    在本书的开始几章中,你已经看到过...
  • hmy1106
  • hmy1106
  • 2015年03月25日 08:42
  • 1402

USB入门系列之一:USB概述

USB是什么呢?一说USB是You SB的意思,即“你傻B”的意思。另一种说法是USB其实是美国的弟弟,因为美国叫USA,USB当然是他的弟弟了。...
  • kevinhg
  • kevinhg
  • 2010年09月30日 23:44
  • 2120

C#3.0入门系列(八)-之GroupBy操作

换一种写作风格。本节讲groupby操作。在所有的Linq To Sql操作中,GroupBy是最难理解的一个。因为,这里和Sql的出入较大。而Group真的就能返回n多组。打开vs,新建一工程,加入...
  • Night_Elf
  • Night_Elf
  • 2007年09月28日 17:28
  • 620

C#3.0入门系列(九)-之GroupBy操作

有朋友反馈说我提供的sample不能编译。大概是版本的问题,可以到http://msdn2.microsoft.com/en-us/bb330936.aspx下载for beta1的版本。本节接着讲g...
  • Night_Elf
  • Night_Elf
  • 2007年09月28日 17:30
  • 629

C#3.0入门系列(九)-之GroupBy操作

C#3.0入门系列(九)-之GroupBy操作 有朋友反馈说我提供的sample不能编译。大概是版本的问题,可以到http://msdn2.microsoft.com/en-us/bb330936.a...
  • starlessnt
  • starlessnt
  • 2008年03月19日 15:46
  • 352

C#3.0入门系列(十一)-之In, Like操作

有这么一个例子,寻找一个表中的某个字段介于某个给定的集合该怎么办?Sql写起来很简单,比如:Select * from table where id in (2,3, 4, 5)。 就是寻找id字段为...
  • Night_Elf
  • Night_Elf
  • 2007年09月28日 17:34
  • 622

C#3.0入门系列(六)-之OrderBy操作

本节讲orderby操作.我突然在想这么一个问题,读者会T-SQL吗?要是不知道,那我写的是不是太简单了呢?做个调查哦,不知道的举手.OrderBy操作简单的,按雇用日期排序,默认为升序       ...
  • Night_Elf
  • Night_Elf
  • 2007年09月28日 16:54
  • 676

C#3.0入门系列(十一)-之In, Like操作

C#3.0入门系列(十一)-之In, Like操作 有这么一个例子,寻找一个表中的某个字段介于某个给定的集合该怎么办?Sql写起来很简单,比如:Select * from table where id...
  • starlessnt
  • starlessnt
  • 2008年03月19日 16:34
  • 465
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#3.0入门系列(五)-之Where操作
举报原因:
原因补充:

(最多只允许输入30个字)