LINQ TO SQL中的select

select这个关键字对于从事数据库开发或者是和数据库相关开发的程序员都特别熟悉,因为它是DML四 大语法之一:查询操作。

select简单结构:        

1:from 变量名(例如:p) in 表名(例如:Customers);
 2:多表查询(例如:from a in Orders),即在第一个from 语法后再来一个或多少;
  3:条件表达示(例如:where p.ID>5);
  4:分组表达式(例如group p by p.ID);
   5:排序表达式(例如:orderby p.ID);

    6:select 要读取的字段信息(例如:p.ID)。

      说明:

             1:1和6是一定要有的,否则会编译错误。

   2:多表查询可以参考如下文章:

1>:LINQ TO SQL中的selectMany

2>:LINQ TO SQL 中的join         

 3:分组可以参数这篇文章:LINQ TO SQL 中的group

      下面是最简单的单表查询:

   from p in Customers
   select p

 

接下来对上面6个部分的其中几个部分详细而简单的说明:

     第一:select的用法 ,因为关系到最后的查询结果,所以是开发员最关心的地方。

           1:可以直接是一个对象,即不指明任何字段,像上面的select p,这相当于读取p对应表的所有字段,在传统SQL中就是select *的意思,一般实际应用中不推荐这样做,除非字段特别少而且都是要输出的内容。

 

           2:某一个表的字段名,例如:select p.ID,可以包含一个以上的字段,而且可以包含不同表的字段,下面的几种写法都是正确的:
               1>:select p,读取全部字段;
               2>:select p.ID,一个表的一个字段;
               3>:select p.ID,p.Name,一个表的多个字段;

             4>:select p.ID,A.OrderID,多个表的多个字段。

 

           3:可以是一个指定的对象:

select new Students
            {
               p.Name,
               n.Address
            };

 

           4:可以指定一个匿名对象:      

select new
            {
               Name
= p.Name,
               Address
= n.Address

            };

 

           5:字段和对象不能混合使用,下面的用法都是错误的:

 

select p.ID,
            select
new
            {
               Name
= p.Name,
               Address
= n.Address
            };
            select p.ID,
           
new
            {
               Name
= p.Name,
               Address
= n.Address
            };

 

          6:如何进行子查询,在select表达式中就可以完成。

 

from c in Customers
select
new
{
     c.Name,
     Purchases
=
         from p
in Purchases
        
where p.CustomerID == c.ID && p.Price > 1000
         select
new { p.Description, p.Price }
}

 

        7:子查询时给表加上别名,主要是利用let关键字。

from c in Customers
let highValue
=
     from p
in c.Purchases
    
where p.Price > 1000
     select
new { p.Description, p.Price }
select
new
{
     c.Name,
     Purchases
= highValue
}

 

       上面的查询也可以写成:

 

from c in Customers    
select
new
{
     c.Name,
     Purchases
= from p in c.Purchases
    
where p.Price > 1000
     select
new { p.Description, p.Price }
}

    

     第二:select 完成后,就要考虑如何排序了 。主要是应用orderby 关键字,descending为降序,否则为升序。     

from p in Purchases
     orderby p.Price descending, p.Description
     select p

 

     第三:如何过滤掉重复记录 ,我们可以使用Distinct()属性。       

var list6 = (from p in db.Customers
                          select p.ID).Distinct();

 

     第四:如何实现传统SQL中的in和not in , 我们可以利用Contains()来实现。拉姆达表达式支持。

         Customers.Where (c => c.Name.Contains ("a"))

     第五:如何实现传统SQL中的LIKE表达式:拉姆达表达式支持。

         1:Customers.Where (c => c.Name.Contains ("a")) ,相当于Like '%a%'。
         2:分两种写法:
            1>:Customers.Where (c => c.Name.StartsWith ("a")),相当于Like 'a%'。
            2>:Customers.Where (c => c.Name.EndsWith ("a")),相当于Like '%a'。

            3>:自己扩展一个LIKE的方法。我会在下面的文章中试试扩展LINQ TO SQL的方法。

      总结:select操作对于以数据查询为主的应用程序来说特别重要,了解它的基础结构及原理后才能写出高效的应用程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值