代码改变世界

關於Linq框架SQL語句的寫法一(select/Distinct操作符)

2009-10-29 17:46  北冥有魚,其名為坤、  阅读(410)  评论(0编辑  收藏  举报

select/distinct操作符
适用场景:查询、
和sql语句中的作用相似但位置不同,查询表达式的select是放在最后的、
Select/Distinct操作包括9种形式,分别为简单用法、匿名类型形式、条件形式、指定类型形式、筛选形式、整形类型形式、嵌套类型形式、本地方法调用形式、Distinct形式。
1.简单用法.
       这个示例返回仅含客户联系人姓名的序列.

var q = from c in db.Customer select c.ContentName;

不过要注意:这个语句只是一个声明或者一个描述,并没有真正把数据取出来,只有当你需要该数据的时候,它才会执行这个语句,这就是延迟加载(deferred loading)。如果,在声明的时候就返回的结果集是对象的集合。你可以使用ToList() 或ToArray()方法把查询结果先进行保存,然后再对这个集合进行查询。当然延迟加载(deferred loading)可以像拼接SQL语句那样拼接查询语法,再执行它。
2.匿名类型形式。
说明:匿名类型是C#3.0中新特性。其实质是编译器根据我们自定义自动产生一个匿名的类来帮助我们实现临时变量的储存。匿名类型还依赖于另外一个特性:支持根据property来创建对象。
        示例1:使用select和匿名类型返回仅含客户联系人姓名和电话号码的序列。

var q = from c in db.Customer select new{c.ContentName,c.Phone};

        示例2:使用SELECT和匿名类型返回仅含雇员姓名和电话号码的序列,并将FirstName和LastName字段合并为一个字段“Name”,此外在所得的序列中将HomePhone字段重命名为Phone。

var q = from c in db.Employees select new
{
    Name 
= c.firstName + c.lastName,
    phone 
= e.homePhone
};

3.条件形式。
说明:生成sql语句为:case when condition then else、
        示例:使用select和条件语句生成产品名称和产品供货状态的序列、

var q = from c in db.product select new 
{
   p.productName,
   Availability 
= p.UnitsInStock - p.UnitsOnOrder < 0 ? "Out Of Stock" : "In Stock"
};

4.指定类型形式、
  说明:该形式返回自定义类型的对象集、
        示例:使用SELECT和已知类型返回雇员姓名的序列。

var q = from c in db.Employee select new Name
{
    FirstName 
= e.FirstName,
    LastName 
= e.LastName
};

5.筛选形式、
说明:结合where使用,起到过滤作用.
          示例:使用SELECT和WHERE返回仅含伦敦客户联系人姓名的序列。

from c in c.Customers where c.City == "London" select c.contentName;

这里先介绍这5种形式,后4种明天继续,下班咯.