zoukankan      html  css  js  c++  java
  • Linq(一)

    概述

      LINQ是.NET框架的扩展,它允许我们以使用SQL查询数据库的方式来查询数据集合。

      使用LINQ,你可以从数据库、程序对象集合以及XML文档中查询数据。

      需要注意的是,对于比较简单的功能,与其使用 Linq,还不如使用 Lambda 表达式,对于相对简单的功能,使用 Lambda 表达式更加的简洁明了,比如:

      //使用 Linq
      var ss = from r in db.Am_recProScheme where r.rpId > 10 select r;
      //使用 Lambda
      var ss1 = db.Am_recProScheme.Where(p => p.rpId > 10);
    
      //对应的 SQL 语句
      string sql = "select * from Am_recProScheme where rpid>10";

      那什么时候选择使用 Linq 而不使用 Lambda 呢?

      答:当查询比较复杂的时候!

        对于复杂的策略组合问题,Linq 是有优势的,可以将复杂的集合操作简单化。(所以 Linq 还是有学习的必要的)

        但是,Linq 本身也会使简单的问题复杂化,所以,对于简单的搜索查询并不推荐使用 Linq。

    Linq 的简单使用例子

      虽然说 Linq 相比于 Lambda 更适合处理复杂一点的策略组,但在学习 Linq 的时候时还是应该通过一些相对简单的实例来学习。

     简单的函数计算:

      //Linq
      //var ss = (from r in db.Am_recProScheme select r).Max(p => p.rpId);
      //var ss = (from r in db.Am_recProScheme select r).Min(p => p.rpId);
      //var ss = (from r in db.Am_recProScheme  select r).Count();
      var ss = (from r in db.Am_recProScheme select r).Sum(p => p.rpId);
    
      //Lambda
      var ss1 = db.Am_recProScheme.Sum(p => p.rpId);

     排序:

      var ss = from r in db.Am_recProScheme
            where r.rpId > 10
            orderby r.rpId descending  //倒序
            //  orderby r.rpId ascending   //正序
            select r;
      //Lambda   var ss1 = db.Am_recProScheme.OrderBy(p => p.rpId).Where(p => p.rpId > 10).ToList();   var ss2 = db.Am_recProScheme.OrderByDescending(p => p.rpId).Where(p => p.rpId > 10).ToList();

     top(1):

      //如果取最后一个可以按倒叙排列再取值
      var ss = (from r in db.Am_recProScheme select r).FirstOrDefault();
      //Lambda
      var ss1 = db.Am_recProScheme.FirstOrDefault();

     跳过前面多少条数据取剩下的数据:

      //Linq
      var ss = (from r in db.Am_recProScheme orderby r.rpId descending select r).Skip(10); //跳过前10条数据,取10条之后的所有数据   
      //Lambda
      var ss1 = db.Am_recProScheme.OrderByDescending(p => p.rpId).Skip(10).ToList();

     分页数据查询:

      //Linq
      var ss = (from r in db.Am_recProScheme
            where r.rpId > 10
            orderby r.rpId descending
            select r).Skip(10).Take(10); //取第11条到第20条数据                   
    
      //Lambda  Take(10): 获取指定数量(10)的连续数据
      var ss1 = db.Am_recProScheme.OrderByDescending(p => p.rpId).Where(p => p.rpId > 10).Skip(10).Take(10).ToList();

     包含,类似 like '%%':

    //Linq
    var ss = from r in db.Am_recProScheme where r.SortsText.Contains("") select r;
    //Lambda
    var ss1 = db.Am_recProScheme.Where(p => p.SortsText.Contains("")).ToList();

     分组 group by:

      //Linq
      var ss = from r in db.Am_recProScheme
            orderby r.rpId descending
            group r by r.recType into n
            select new
            {
              n.Key,  //这个Key是recType
              rpId = n.Sum(r => r.rpId), //组内rpId之和
              MaxRpId = n.Max(r => r.rpId),//组内最大rpId
              MinRpId = n.Min(r => r.rpId), //组内最小rpId
            };
      foreach (var t in ss)
      {
        Response.Write(t.Key + "--" + t.rpId + "--" + t.MaxRpId + "--" + t.MinRpId);
      }
      //
      var ss1 = from r in db.Am_recProScheme
            orderby r.rpId descending
            group r by r.recType into n
            select n;
      foreach (var t in ss1)
      {
        Response.Write(t.Key + "--" + t.Min(p => p.rpId));
      }
    
      //Lambda
      var ss2 = db.Am_recProScheme.GroupBy(p => p.recType);

     连接查询:

      //Linq
      var ss = from r in db.Am_recProScheme
            join w in db.Am_Test_Result on r.rpId equals w.rsId
            orderby r.rpId descending
            select r;
      //Lambda
      var ss1 = db.Am_recProScheme.Join(db.Am_Test_Result, p => p.rpId, r => r.rsId, (p, r) => p).OrderByDescending(p => p.rpId).ToList();

     sql 中的 In:

      //Linq
      var ss = from p in db.Am_recProScheme
            where (new int?[] { 24, 25,26 }).Contains(p.rpId)
            select p;
      //Lambda
      string st = "select * from Am_recProScheme where rpId in(24,25,26)";
  • 相关阅读:
    Python定时任务利器—Apscheduler
    Python命令行模块(sys.argv,argparse,click)
    Rust安装和环境配置
    DBF 文件 ORACLE 数据库恢复
    认识 Cargo-Rust构建工具和包管理器
    VS Code 搭建 Rust 开发环境
    如何按名称或PID查找一个进程?如何按端口号查找一个进程?如何查看一个进程的CPU和内存、文件句柄使用情况?如何查看CPU利用率高的TOP10进程清单?如何根据PID强制终止进程?
    String 字符串
    JVM初探之类文件结构
    隐藏Windows不常用设置项
  • 原文地址:https://www.cnblogs.com/zhangchaoran/p/9994140.html
Copyright © 2011-2022 走看看