zoukankan      html  css  js  c++  java
  • 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

          下面是最简单的单表查询:接下来我对上面的6个部分的其中几个部分详细而简单的说明下:

      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 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操作对于以数据查询为主的应用程序来说特别重要,了解它的基础结构,原理后才能写出高效的应用程序。听有园友说,LINQ TO SQL可能会被抛弃,无论真与否,心中总不是个滋味,但我还是会坚持学习完LINQ TO SQL,做事总不能半途而废。  
     
    注:
       文中参考nutshell示例
      
       
     
  • 相关阅读:
    YII2操作mongodb笔记(转)
    MongoDB创建数据库和集合命令db.createCollection详解(转)
    MongoDB设置访问权限、设置用户(转)
    使用Robomongo 连接MongoDB 3.x 报 Authorization failed 解决办法(转)
    Yii2框架与MongoDB拓展、Redis拓展的安装流程
    YII2 Model 类切换数据库连接
    Centos6.5搭建java开发环境
    YII切换开发和生产环境(命令)
    YII2 实现后台操作记录日志(转)
    phpstorm2018激活方法--使用激活码
  • 原文地址:https://www.cnblogs.com/ASPNET2008/p/1359752.html
Copyright © 2011-2022 走看看