• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
成为自己最想成为的那种人
博客园    首页    新随笔    联系   管理    订阅  订阅
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)";

 

posted on 2018-11-21 11:49  遇见未来  阅读(224)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3