专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »DotNet » ejb3.0入门经典:C#3.0入门系列( 5)-的Where操作 »正文

ejb3.0入门经典:C#3.0入门系列( 5)-的Where操作

来源: 发布时间:星期二, 2009年2月17日 浏览:9次 评论:0
  从本节开始本文正式更名为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操作

  最简单

      varq=
        fromcindb.Customers
        selectc.ContactName;


  匿名类

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


  条件

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


  这种条件会被翻译成sql中{ when condition then 

  name type形式:

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


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

  shaped形式:       varq=
        fromcindb.Customers
        select{
          c.CustomerID,
          CompanyInfo={c.CompanyName,c.City,c.Country},
          ContactInfo={c.ContactName,c.ContactTitle}
        };


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

  nested形式:

      varq=
        fromoindb.Orders
        select{
          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操作:

  最简单

      var q =
        from c in db.Customers
        where c.City "London"
        select c;
  
      var q =
        from e in db.Employees
        where e.HireDate >= DateTime(1994, 1, 1)
        select e;


  或和关系where条件

      varq=
        frompindb.Products
        wherep.UnitsInStock<=p.ReorderLevel&&!p.Discontinued
        selectp;
      varq=
        frompindb.Products
        wherep.UnitPrice>10m||p.Discontinued
        selectp;
      varq=
        db.Products.Where(p=>p.UnitPrice>10m).Where(p=>p.Discontinued);


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

  欠套在first操作中where条件:

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

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


  第个例子是筛选customerid为"BONAP"客户第 2个筛选订单运费大于10订单First操作必须用这种级连形式比如 Shippershipper=db.Shippers.First;

  也可以把linqexpression和级连形式混合使用比如第个例子加入first操作       varq=
        (fromcindb.Customers
        wherec.City"London"
        selectc).First;


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

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: