转载:C#3.0入门系列(五)[原dlinq入门系列]
2007-07-03 18:47
465 查看
从本节开始,本文正式更名为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,如果有条件,它在翻译时,就会加入条件语句。
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,如果有条件,它在翻译时,就会加入条件语句。
相关文章推荐
- 转载:C#3.0入门系列(六)[原dlinq入门系列]
- LINQ学习系列之LINQ入门
- linq入门系列导航
- CSDN博客入门系列——如何转载博客
- [新手入门]快速学习 ADO.NET Entity Framework系列文章 #3 -- LINQ-to-SQL、EntitySQL、查询产生器方法(Query builder)三种语法
- Linq 入门系列 [Take,Skip,TakeWhile,SkipWhile]篇
- Angular系列----AngularJS入门教程02:静态模板(转载)
- Angular系列---- AngularJS入门教程03:AngularJS 模板(转载)
- Angular系列----AngularJS入门教程05:双向绑定(转载)
- [转载]Symbian开发系列 - 入门篇
- Python Twisted 学习系列5(转载stulife最棒的Twisted入门教程)
- Python Twisted 学习系列10(转载stulife最棒的Twisted入门教程)
- Python Twisted 学习系列20(转载stulife最棒的Twisted入门教程)
- .Net进阶系列(4)-Lambda和linq入门(被替换)
- Visual Studio 2008开发新特性系列课程(3):VS2008新特性之LINQ入门
- LinQ 入门系列 [OfType,ToArray,ToList,ToDictionary]
- Angular系列----AngularJS入门教程04:迭代器过滤(转载)
- C#3.0入门系列(LinQ)(六)-之OrderBy操作
- Python Twisted 学习系列6(转载stulife最棒的Twisted入门教程)
- Python Twisted 学习系列11(转载stulife最棒的Twisted入门教程)