VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Objective-C编程 >
  • C#3.0入门系列(五)-之Where操作

制作者:剑锋冷月 单位:无忧统计网,www.51stat.net
 

  从本节开始,本文正式更名为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,      varq=
        fromcindb.Customers
        selectc.ContactName;

  匿名类的

1,      varq=
        fromcindb.Customers
        selectnew{c.ContactName,c.Phone};
2,      varq=
        fromeindb.Employees
        selectnew{Name=e.FirstName+""+e.LastName,Phone=e.HomePhone};
3,      varq=
        frompindb.Products
        selectnew{p.ProductID,HalfPrice=p.UnitPrice/2};

  条件的

      varq=
        frompindb.Products
        selectnew{p.ProductName,Availability=p.UnitsInStock-p.UnitsOnOrder<0?"OutOfStock":"InStock"};

  这种条件的会被翻译成sql中{case when condition then else}的。

  name type形式的:

      varq=
        fromeindb.Employees        
        selectnewName{FirstName=e.FirstName,LastName=e.LastName};

 

  只所以是name type的,是因为Name类是已经定义好的,也就是说,你可以用这种方式,返回你需要类型的对象集.

  shaped形式的:

      varq=
        fromcindb.Customers
        selectnew{
          c.CustomerID,
          CompanyInfo=new{c.CompanyName,c.City,c.Country},
          ContactInfo=new{c.ContactName,c.ContactTitle}
        };

  该形式,其select操作使用了匿名对象,而这个匿名对象中,其属性也是个匿名对象。

  nested形式的:

      varq=
        fromoindb.Orders
        selectnew{
          o.OrderID,
          DiscountedProducts=
            fromodino.OrderDetails
            whereod.Discount>0.0
            selectod,
          FreeShippingDiscount=o.Freight
        };

  其返回的对象集中的每个对象DiscountedProducts属性中,又包含一个小的集合。也就是每个对象也是一个集合类。

  Distinct形式的:

      varq=(
        fromcindb.Customers
        selectc.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,      varq=
        frompindb.Products
        wherep.UnitsInStock<=p.ReorderLevel&&!p.Discontinued
        selectp;
2,      varq=
        frompindb.Products
        wherep.UnitPrice>10m||p.Discontinued
        selectp;
3,      varq=
        db.Products.Where(p=>p.UnitPrice>10m).Where(p=>p.Discontinued);

  在上例中,1和2语句先被翻译成类似3语句的形式,再被翻译成sql语句,送回数据服务器。他们基本上一样的。

  欠套在first操作中的where条件:

  first操作,其实质就是在sql语句前,加了一个top 1.

1,      Customercust=db.Customers.First(c=>c.CustomerID=="BONAP");
2      Orderord=db.Orders.First(o=>o.Freight>10.00M);

  第一个例子,是筛选customerid为"BONAP"的客户,第二个筛选订单运费大于10的订单。First操作必须用这种级连的形式。比如

Shippershipper=db.Shippers.First();

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

      varq=
        (fromcindb.Customers
        wherec.City=="London"
        selectc).First();

  如果加入first操作,其返回是一个具体的对象,而不是一个集合。如果first操作没有条件,它只是简单的在sql语句中添加top 1,如果有条件,它在翻译时,就会加入条件语句。

 

  只所以是name type的,是因为Name类是已经定义好的,也就是说,你可以用这种方式,返回你需要类型的对象集.

  shaped形式的:

      varq=
        fromcindb.Customers
        selectnew{
          c.CustomerID,
          CompanyInfo=new{c.CompanyName,c.City,c.Country},
          ContactInfo=new{c.ContactName,c.ContactTitle}
        };

  该形式,其select操作使用了匿名对象,而这个匿名对象中,其属性也是个匿名对象。

  nested形式的:

      varq=
        fromoindb.Orders
        selectnew{
          o.OrderID,
          DiscountedProducts=
            fromodino.OrderDetails
            whereod.Discount>0.0
            selectod,
          FreeShippingDiscount=o.Freight
        };

  其返回的对象集中的每个对象DiscountedProducts属性中,又包含一个小的集合。也就是每个对象也是一个集合类。

  Distinct形式的:

      varq=(
        fromcindb.Customers
        selectc.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;



相关教程