初探Linq表达式和lambda表达式

2023-11-14

【Linq表达式】

         LINQ,语言集成查询(LanguageIntegrated Query)是一组用于c#和Visual Basic语言的扩展。它允许编写C#或者VisualBasic代码以查询数据库相同的方式操作内存数据。

        博主认为,Linq表达式在用法方面就是SQL语句的变形,只要将SQL语句按照执行顺序来重新编写就可以得到Linq表达式。

【Lambda表达式】

        Lambda 用在基于方法的 LINQ查询中,对网上查询到的关于Lambda表达式的资料不甚了解。Lambda表达式的使用在C#中,Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to”。

        博主认为:Lambda用于Linq查询中,Lambda表达式就是用Lambda语法将Linq表达式表示出来。

       下面用几个语句对Linq表达式和Lambda表达式进行区别,为了便于理解,每个例子都以SQL语句、Linq表达式、Lambda表达式三种形式呈现。

1.简单的查询

//1——Linq表达式
var ss = from r in db.Am_recProScheme
         select r;
//2——Lambda表达式
var ss1 = db.Am_recProScheme;
//3——SQL语句
string sssql = "select * from Am_recProScheme";
2.带where的查询

//1
var ss = from r in db.Am_recProScheme
         where r.rpId > 10
         select r;
//2
var ss1 = db.Am_recProScheme.Where(p => p.rpId > 10);
//3
string sssql = "select * from Am_recProScheme where rpid>10";
3.简单的函数计算(count,min,max,sum)
//1
获取最大的rpId
//var ss = (from r in db.Am_recProScheme
//          select r).Max(p => p.rpId);
获取最小的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();
//获取rpId的和
var ss = (from r in db.Am_recProScheme
         select r).Sum(p => p.rpId);


//2
//var ss1 = db.Am_recProScheme.Max(p=>p.rpId);
//var ss1 = db.Am_recProScheme.Min(p => p.rpId);
//var ss1 = db.Am_recProScheme.Count() ;
var ss1 = db.Am_recProScheme.Sum(p => p.rpId);
Response.Write(ss);

//3
string sssql = "select max(rpId) from Am_recProScheme";
       sssql = "select min(rpId) from Am_recProScheme";
       sssql = "select count(1) from Am_recProScheme";
       sssql = "select sum(rpId) from Am_recProScheme";
4.排序order by desc/asc
var ss = from r in db.Am_recProScheme
         where r.rpId > 10
         orderby r.rpId descending  //倒序
         //  orderby r.rpId ascending   //正序
         select r;

//正序
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();
<span style="font-family: Calibri; font-size: 18.6667px;">string sssql = "select * from Am_recProScheme where rpid>10 order by rpId [desc|asc]";</span>
5.top(1)

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

//2 linq to ef 好像不支持 Last() 
var ss1 = db.Am_recProScheme.FirstOrDefault();
//var ss1 = db.Am_recProScheme.First();          
//3 
string sssql = "select top(1) * from Am_recProScheme";
6.跳过前面多少条数据取余下的数据
//1
var ss = (from r in db.Am_recProScheme
         orderby r.rpId descending
         select r).Skip(10); //跳过前10条数据,取10条之后的所有数据   
//2  
var ss1 = db.Am_recProScheme.OrderByDescending(p => p.rpId).Skip(10).ToList();
//3
string sssql = "select * from  (select ROW_NUMBER()over(order by rpId desc) as rowNum, * from [Am_recProScheme]) as t where rowNum>10";
7.分页数据查询
//1
var ss = (from r in db.Am_recProScheme
         where r.rpId > 10
         orderby r.rpId descending
         select r).Skip(10).Take(10); //取第11条到第20条数据                   

//2 Take(10): 数据从开始获取,获取指定数量(10)的连续数据
var ss1 = db.Am_recProScheme.OrderByDescending(p => p.rpId).Where(p => p.rpId > 10).Skip(10).Take(10).ToList();
//3
string sssql = "select * from  (select ROW_NUMBER()over(order by rpId desc) as rowNum, * from [Am_recProScheme]) as t where rowNum>10 and rowNum<=20";
8.包含,类似like '%%'
//1
var ss = from r in db.Am_recProScheme
         where r.SortsText.Contains("张")
         select r;
//2
var ss1 = db.Am_recProScheme.Where(p => p.SortsText.Contains("张")).ToList();
//3
string sssql = "select * from Am_recProScheme where SortsText like '%张%'";
9.分组group by
//1
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);
}
//2
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));
}
//3
var ss2 = db.Am_recProScheme.GroupBy(p => p.recType);
foreach (var t in ss2)
{
        Response.Write(t.Key + "--" + t.Min(p => p.rpId));
}
//4
string sssql = "select recType,min(rpId),max(rpId),sum(rpId) from Am_recProScheme group by recType";
10.连接查询
//1
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;
//2
var ss1 = db.Am_recProScheme.Join(db.Am_Test_Result, p => p.rpId, r => r.rsId, (p, r) => p).OrderByDescending(p => p.rpId).ToList();
//3
string sssql = "select r.* from  [Am_recProScheme] as r inner join [dbo].[Am_Test_Result] as t on r.[rpId] = t.[rsId] order by r.[rpId] desc";
11.sql中的In
//1——Linq
var ss = from p in db.Am_recProScheme
         where (new int?[] { 24, 25,26 }).Contains(p.rpId)
         select p;
foreach (var p in ss)
{
       Response.Write(p.Sorts);
}
//2——SQL
string st = "select * from Am_recProScheme where rpId in(24,25,26)";

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

初探Linq表达式和lambda表达式 的相关文章

  • 监狱智能管理平台 ——监室点名(人脸识别)

    从事人脸识别行业渐进2年 主要开发监狱的人脸识别服务 内心一直有一个梦想 打造出一款智能化的现代化的监狱管理系统 不过要智能化到什么程度 心里却没有普尼 恐怕是从事IT行业后 总想设计出一款满意的产品 对自己从事该行业有一个交代做的怪吧 自
  • HTTP服务器(二)

    前面已经实现了服务器的整体框架 现在就来具体实现HTTP服务器处理静态页面的逻辑 要获取具体的静态文件 就要知道要获取的文件的路径 我们分析url 协议方案名 使用http 或https 等协议方案名获取访问资源时要指定的协议类型 登录信息
  • 大学生可以做的兼职有哪些?我收集了这份兼职指南,请查收

    大学生应该以学业为主 但是对即将踏入社会的你们 提前锻炼自身 多学习一项技能 无疑是对自己的一种 增值 其实大学生平常的业余时间都是被恋爱 游戏 影音占据了大半 有兼职想法的并不是太多 有这想法的多半是一些自立 有上进心的孩子 所以对这些大
  • 项目_MySQL服务器被入侵,数据丢失,一招教你恢复数据【已恢复】

    已恢复 MySQL服务器被入侵 数据丢失 一招教你恢复数据 0 前言 当时在宝塔安装了MySQL5 7 然后当时只是测试 就直接设置用户名和密码为root 今天在Navicat突然登录不上了 于是在linux下登录MySQL 只剩下一个Re
  • 实时车辆行人多目标检测与跟踪系统(含UI界面,Python代码)

    算法架构 目标检测 yolov5 目标跟踪 OCSort 其中 Yolov5 带有详细的训练步骤 可以根据训练文档 训练自己的数据集 及其方便 另外后续 目标检测会添加 yolov7 yolox 目标跟踪会添加 ByteTrack deep
  • Vue3封装 Message消息提示实例函数

    Vue3封装 消息提示实例函数 实现效果 Vue2 0使用 Vue prototype message function vue3 0使用app config globalProperties挂载原型方法app config globalP
  • 【手写一个Tomcat】SimpleTomcat-01

    目录 前言 实现 http TomcatRequest http TomcatResponse http TomcatServlet SimpleTomcat servlet FirstServlet servlet SecondServl
  • SpringBoot+MyBatis搭建迷你小程序

    本项目如下 maven的安装目录在哪 setting文件放在哪 仓库在哪 分别为G Program Files x86 apache maven 3 5 4 conf 与G Program Files x86 apache maven 3
  • springboot实现ApplicationContextAware接口、使用ThreadLocal获得当前上下文请求的HttpServletRequest

    前端请求的参数可以用requestparam requestbody获得 也可以用HttpServletRequest来获得参数 这里讲用HttpServletRequest来获取前端参数的办法 举例 GetMapping index do
  • 高德地图定位

    高德地图开放平台 获取key 获取key值后 将其在index html中引入 然后来到App vue下 即根组件下 一进项目就可以获取定位 所以在钩子函数created 中实现定位功能
  • react native打包apk时配置gradle阿里云maven仓库加速依赖下载

    前言 使用react native进行打包apk时 因为maven仓库的原因会导致某些依赖和包没有添加成功 会导致一些问题 所以做法就是将gradle中的仓库地址进行配置 而且配置过程中有一些注意事项要注意 问题详解 进入android目录
  • Nodejs学习

    本周我们主要学习了Nodejs相关知识 我也整理了一些相关知识点 首先呢 我们要了解Nodejs不是一门语言 也不是库 不是框架 而是一个JavaScript运行时环境 也就是说它可以解析和执行JavaScript代码 我们知道 浏览器中的
  • 项目 谷粒学院Day16-18

    Day 16 07 13 统计分析模块 后台 准备工作 创建统计表 创建service statistics模块 使用代码生成器生成代码 创建启动类 SpringBootApplication ComponentScan basePacka
  • 基于SSM的图书管理系统

    一 系统简介 该项目是基于Java的SSM框架实现的图书管理系统 二 技术实现 1 后台框架 Spring SpringMVC MyBatis Ajax 2 UI界面 BootStrap 3 数据库 MySQL 5 7 4 加密 md5 随
  • HTTP服务器(三)

    下面实现处理动态页面的逻辑 创建一对命名管道 fork创建子进程 让父子进程执行不同的任务 值得注意的是 由于管道数据流动是单向的 所以要创建一对 父进程将必要的信息通过管道传递给子进程 子进程将计算的结果通过管道传递给父进程 int Ha
  • 米米商城项目

    米米商城 1 开发环境 2 项目功能 3 项目搭建步骤 4 配置文件 4 1 pom xml 4 2 jdbc properties 4 3 Mybaties配置文件 SqlMapConfig xml 4 4 Spring配置文件 4 4
  • 基于Java发起HTTP请求实现文件的上传

    需要用到的包
  • 给缺少Python项目实战经验的人

    我们在学习过程中最容易犯的一个错误就是 看的多动手的少 特别是对于一些项目的开发学习就更少了 没有一个完整的项目开发过程 是不会对整个开发流程以及理论知识有牢固的认知的 对于怎样将所学的理论知识应用到实际开发中更是不得而知了 以上就是我们在
  • MyTinyStl源码刨析

    文章目录 源码信息及目录 启动项目 迭代器 分配器 算法 容器实现 测试框架Test 源码信息及目录 MyTinySTL 项目地址 该项目实现了C 的stl库 阅读该项目可以使我们对stl的底层有更深入的认识 同时可以增强我们的c 的内功
  • java简易聊天程序

    目录 项目结构 TCP 窗体组成 server client properties 项目结构 TCP 窗体组成 server package cn itcast chat import javax swing import java awt

随机推荐

  • 电商打折套路解析

    1 分析出 各个品牌都有多少商品参加了双十一活动 这里面有个问题 最后在设置分类是设置错了 应该有4个类 少量少打折 少量大打折 大量小打折 大量大打折 分析思路可以参考下面的思维导图 import numpy as np import p
  • 使用Matplotlib画心形函数图

    函数如下 代码如下 import numpy as np import matplotlib pyplot as plt 导入模块 t np arange 6 6 0 1 x 16 np power np sin t 3 y 13 np c
  • labview与三菱PLC通讯研究

    labview 与三菱 PLC 通讯研究 一 介绍Labview Labvie是实验室虚拟仪器工程工作台 Labview Virtual Instruments Engineering Workbench 的简称 是美国国家仪器公司开发的虚
  • Spring 日志框架

    Spring5 日志使用 Spring jcl 模块 测试一下spring5 的默认日志实现 public class LogDemo public static void main String args Log logger LogFa
  • 第十五届全国大学生信息安全竞赛(ciscn初赛) 部分writeup

    杂项的附件地址 https share weiyun com BZyngGSZ CISCN web Ezpop misc everlasting night ez usb 问卷调查 pwn login nomal crypto 签到电台 基
  • ICDE2020

    Improving Neural Relation Extraction with Implicit Mutual Relations Jun Kuang Yixin Cao Jianbing Zheng Xiangnan He Ming
  • Centos虚拟机使用virt-manager创建虚拟机

    目录 使用virt manager 主机与centos7虚拟机的共享文件夹设置 将共享文件夹中的iso文件复制到上个home iso目录下 使用virt manager创建虚拟机 上篇文章链接 VM下安装Ubuntu CentOS并安装配置
  • C#两种进程暂停和继续的方法 2021-02-16

    C 两种进程暂停和继续的方法 方法一 方法二 方法一 可以使用Thread Suspend和Thread Resume这两个方法 namespace ThreadSuspended public partial class Form1 Fo
  • CLIP跨语言多模态模型 pytorch下安装

    github地址 GitHub openai CLIP Contrastive Language Image Pretraining 创建python环境 conda create n CLIP python 3 8 安装pytorch和t
  • lxml.html方法,用lxml编辑html代码

    假设我有html代码 它被破坏了 它是从另一个程序给出的 我必须找到其中的所有图像 并将src属性更改为一些代码 仅此而已 它应该在决赛中被打破 在 这是我的代码 coding utf 8 from lxml import etree fr
  • Android 查看是否已经安装某应用(获取某应用的包名)

    借助的工具 adb以及真手机 adb下载 https dl google com android repository platform tools r33 0 1 windows zip 下载解压 解压到ADB文件 复制该路径 配置环境变
  • 数据库SQL运用(1)

    数据库关键字 Top Like In Between As Join InnerJoin LeftJoin RightJoin FullJoin Union Top Top 子句用来截取要返回的数目 如果查询出的数据有成千上百条 那么Top
  • 机器学习——回归问题中的曲线过拟合问题

    问 使用简单的函数解决回归问题时更容易过拟合 答 使用简单的函数解决回归问题可能更容易欠拟合 而不是过拟合 这是因为简单的函数通常具有较低的灵活性 不能很好地拟合复杂的数据模式 因此 如果使用简单的函数来解决复杂的回归问题 则可能会发生欠拟
  • 计算机二级python基础题刷题笔记(三)

    hello 看到三的小伙伴们你们已经超过30 的对手啦 接下来也要加油呀 代码没有最好 只有更好 如果你有更好的想法答案欢迎在评论区里发表呀 1 将程序里定义好的std列表里的姓名和成绩与已经定义好的模板拼成一段话 显示在屏幕里 std 张
  • 使用QrCode解析二维码

    使用QrCode识别二维码 1 引入QrCode import QrCode from qrcode decoder 2 HTML 使用el upload上传图片
  • 中秋-canvas-唯美星空

    明月几时有 把酒问青天 不知天上宫阙 今夕是何年 我欲乘风归去 又恐琼楼玉宇 高处不胜寒 起舞弄清影 何似在人间 转朱阁 低绮户 照无眠 不应有恨 何事长向别时圆 人有悲欢离合 月有阴晴圆缺 此事古难全 但愿人长久 千里共婵娟 值此中秋佳节
  • IMU预积分的一些理解

    IMU预积分 算是比较简单的一个算法 无奈网上找到的资料都讲的晦涩难懂 看明白了也觉得不过如此 讲一下我的理解 整体流程 1 推导IMU离散运动方程 2 根据离散运动方程 进行预积分 并将预积分的误差项拆分出来 因为我们在定义误差的时候 有
  • 图像处理——matlab人脸识别(1)

    目录 一 前言 二 相关程序 一 主函数 二 图库生成函数 三 图库图像命名函数 四 待识别图库生成函数 五 待识别图库命名函数 六 图像数据导入函数 七 PCA简单主成分分析函数 八 图像匹配函数 三 识别效果 一 前言 近期 要做一个人
  • 本地服务器部署环境和搭建项目②

    安装本地虚拟机 虚拟机版本 16 CenterOS版本 7 0 启动虚拟机之后进入配置 虚拟机安装完成 准备SSH连接远程服务器的工具 准备XFTP 7 0版本 用来将本地文件上传到Linux系统 传输文件 1 可以使用ctrl c ctr
  • 初探Linq表达式和lambda表达式

    Linq表达式 LINQ 语言集成查询 LanguageIntegrated Query 是一组用于c 和Visual Basic语言的扩展 它允许编写C 或者VisualBasic代码以查询数据库相同的方式操作内存数据 博主认为 Linq