linq to sql 用法 ----- select

一个简单的单表查询

  from p  in  Customers select p

第一: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 q  =  (from p  in  db.Customers select p.ID).Distinct(); 

  

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

var q = 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'。
      总结:select操作对于以数据查询为主的应用程序来说特别重要,了解它的原理后才能写出高效的应用程序。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值