C# LINQ和Lambda表达式对照

C# LINQ和Lambda表达式对照

1. 基本查询语句

Linq语法:

var data=from a in db.Areas select a ;  

Lamda语法:

var data=db.Areas;  

sql语法:

SELECT * FROM Areas

2. 简单的WHERE语句

Linq语法:

var data=from a in db.orderInfo where a.orderId > 20 select a ;  

Lamda语法:

var data=db.orderInfo.Where( t=>t.orderId > 20 ) ;  

sql语法:

SELECT * FROM orderInfo WHERE orderId > 20

3. 关于“COUNT、SUM、MIN、MAX”函数的语句

Linq语法:

//查询该表中最大编号Id  
var data=( from a in db.orderInfo select a ).Max( p=>p.orderId ) ;//查询该表中最小编号Id  
var data=( from a in db.orderInfo select a ).Min( p=>p.orderId ) ;//查询该表数据总条数  
var data=( from a in db.orderInfo select a ).Count() ;//查询该表中所有消费额的总数(求和)
var data=( from a in db.orderInfo select a ).Sum( p=>p.orderMoney ) ;  

Lamda语法:

//查询该表中最大编号Id  
var data=db.orderInfo.Max( t=>t.orderId );//查询该表中最小编号Id 
var data=db.orderInfo.Min( t=>t.orderId ); //查询该表数据总条数  
var data=db.orderInfo.Count();//查询该表中所有消费额的总数(求和) 
var data=db.orderInfo.Sum( t=>t.orderMoney);

sql语法:

SELECT MAX(orderId) FROM orderInfoSELECT MIN(orderId) FROM orderInfoSELECT COUNT(*) FROM orderInfoSELECT SUM(orderMoney ) FROM orderInfo

4. 关于数据排序的语句

Linq语法:

//倒序排序,升序可用ascending关键字  
var data=from a in db.orderInfo where a.orderId > 20 orderby a.orderId descending select a ;

Lamda语法:

//情况一,根据单字段排序:  
//倒序排序,升序可用OrderBy关键字
var data=db.orderInfo.OrderByDescending( t=>t.orderId ).Where( t=>t.orderId > 20 ).ToList();  //情况二,根据多字段主次排序:  
//先按年升序,再按月升序  
var priceMonthEntities = priceMonthApp.GetList().OrderBy(t => t.F_Year).ThenBy(t => t.F_Month).ToList();

sql语法:

//倒序排序,升序可用ASC关键字
SELECT * FROM orderInfo WHERE orderId > 20 ORDER BY orderId DESC   

5. 关于分页查询的语句

Linq语法:

var data=( from a in db.orderInfo select a ).Skip((pageIndex-1) * pageSize).Take(pageSize).ToList();  

Lamda语法:

//pageIndex:当前页码,pageSize:分页数据显示条数  
var data=db.orderInfo.Skip((pageIndex-1)* pageSize).Take(pageSize).ToList();

sql语法:

SELECT TOP pageSize * FROM orderInfo 
WHERE orderId NOT IN(SELECT TOP( ( pageIndex - 1) * pageSize) orderId FROM orderInfo)

6. 关于模糊查询(like)的语句

Linq语法:

//使用Contains关键字进行模糊匹配  
var data= from a in db.orderInfo where a.orderId.Contains(1) select a;

Lamda语法:

//使用Contains关键字进行模糊匹配  
var data=db.orderInfo.Where(t=>t.F_UserId.Contains("1")).ToList();

sql语法:

//使用like关键字进行模糊匹配  
SELECT * FROM orderInfo WHERE orderId LIKE '%12%'

7. 关于分组查询的语句

Linq语法:

var data= from a in db.orderInfo orderby a.orderId descending   group a by a.orderType into s select new{  s.key,//分组字段  s.sMoney=s.Sum(a=>a.orderMoney),//分组后算出总的消费额  s.maMoney=s.Max(a=>a.orderMoney),//分组后算出最大的消费额  s.miMoney=s.Min(a=>a.orderMoney)//分组后算出最小的消费额  };  

Lamda语法:

//使用GroupBy关键字进行分组查询(单个字段)  
var data=db.orderInfo.GroupBy(p => p.recType).Select(t=>t.Key).ToList();  //使用GroupBy关键字进行分组查询(多个字段)  
var data=db.orderInfo.GroupBy(p =>new{ p.recType,p.orderId}).Select(t=>new{ recType=t.Key.recType,orderId=t.Key.orderId}).ToList();  

sql语法:

SELECT orderType , SUM(orderMoney), MAX(orderMoney), MIN(orderMoney) 
FROM orderInfo GROUP BY orderType

8. 关于多表关联查询的语句

Linq语法:

//使用join关键字进行表连接  
var data= from a in db.orderInfo join e in db.orderType on a.orderTypeId equals e.id select r ;   var query=from t in db.orderInfo join s in db.orderType on t.orderTypeId equals s.id select new {  orderId=t.id,  orderTypeName=s.name,  ...  }  

Lamda语法:

var data=db.orderInfo.Join(db.orderType,t=>t.orderTypeId,s=>s.id,(t,s)=>t).OrderByDescending(t=>t.orderId).  Select(  t=> new{  orderId=t.t.id,  orderTypeName=t.s.name,  ...  }).ToList(); //使用Join关键字进行表连接  

EF Core中的写法:

var data=db.orderInfo.Join(db.orderType,t=>t.orderTypeId,s=>s.id,(t,s)=>new{  orderId=s.Id,  .....  
}).toList();  

sql语法:(sql语句表关联有多种方法,在此只举一例)

SELECT * FROM orderInfo o ,orderType t 
WHERE o.orderTypeId=t.id ORDER BY t.createDate

9. 关于in查询的语句

Linq语法:

var data= from a in db.orderInfo where (new int?[2213,43311,32422]).Contains(a.orderId) select a ;   

Lamda语法:

var data=db.orderInfo.Where(t=>(new int?[2213,43311,32422]).Contains(t.orderId)).ToList();  

sql语法:

SELECT * FROM orderInfo WHERE orderId IN (2213,43311,32422)

10. 关于去重查询的语句

Linq语法:

//使用group关键字进行表数据去重  
var data= from a in db.orderInfo group p by new {a.orderTypeId} into _group select _group.FirstOrDefault(); //使用group关键字对多个字段进行表数据去重  
var data= from a in db.orderInfo group p by new {a.orderTypeId,...} into _group select _group.FirstOrDefault(); 

Lamda语法:

//单个去重:  
// 使用GroupBy关键字进行表数据去重  
var data=db.orderInfo.GroupBy(t=>t.orderTypeId).Select(r => r.First()).ToList(); // 使用DistinctBy关键字进行表数据去重  
var data=db.orderInfo.DistinctBy(t=>t.orderTypeId).ToList(); //多个字段去重:  
// 使用GroupBy关键字对多个字段进行表数据去重  
var data=db.orderInfo.GroupBy(t=>new{t.orderTypeId,...}).Select(r => r.First()).ToList(); // 使用DistinctBy关键字对多个字段进行表数据去重  
var data=db.orderInfo.DistinctBy(t=>new{t.orderTypeId,...}).ToList(); 

sql语法:

-- 使用DISTINCT关键字进行表数据去重  
SELECT DISTINCT orderTypeId  FROM orderInfo-- 使用GROUP BY关键字进行表数据去重 
SELECT orderTypeId FROM orderInfo GROUP BY orderTypeId

11. 内连接 INNER JOIN

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;  

Lamda语法:

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语法:

SELECT r.* FROM Am_recProScheme AS r INNER JOIN Am_Test_Result AS t ON r.[rpId] = t.[rsId] ORDER BY r.[rpId] DESC 

12. 左连接 LEFT JOIN

要求:两个DataTable关联,查找只在第一个表中的数据

DataTable dt1 = new DataTable("Ta");  
DataTable dt2 = new DataTable("Tb");  
dt1.Columns.Add("ID", typeof(int));  
dt1.Columns.Add("Name", typeof(string));  
dt1.Rows.Add(1, "小明");  
dt1.Rows.Add(2, "小红");  
dt1.Rows.Add(3, "小黑");  
dt2.Columns.Add("ID", typeof(int));  
dt2.Columns.Add("Name", typeof(string));  
dt2.Rows.Add(1, "小黄");  
dt2.Rows.Add(2, "小红");  
dt2.Rows.Add(3, "小强");  

Linq语法:

var query = from q1 in dt1.AsEnumerable()  join q2 in dt2.AsEnumerable()  on q1.Field<string>("Name") equals q2.Field<string>("Name") into tmp  from q3 in tmp.DefaultIfEmpty()  where q3 == null  select new {  ID = q1.Field<int>("ID"),  Name = q1.Field<string>("Name")  };  

Lamda语法 :

var query = dt1.AsEnumerable().GroupJoin(  dt2.AsEnumerable(),  x => x.Field<string>("Name"),  y => y.Field<string>("Name"),  (x, y) => y.DefaultIfEmpty(). Where(w => w == null).  Select(z => new { ID = x.Field<int>("ID"), Name = x.Field<string>("Name") })  ).SelectMany(x => x);  foreach (var item in query)  {  Console.WriteLine($"ID={item.ID}    Name={item.Name}");  }  

13. 三表连接

sql 语法:

SELECT id, name, jname, cname     FROM userinfo u     LEFT JOIN job j on u.job = j.jid     LEFT JOIN city c on u.city = c.cid    

Linq语法:

var list = (    from u in dc.userinfos    join j in dc.jobs on u.job equals j.jid into j_join    from x in j_join.DefaultIfEmpty()    join c in dc.cities on u.city equals c.cid into c_join    from v in c_join.DefaultIfEmpty()    select new    {    id = u.id,    name = u.name,    jname = x.jname,    cname = v.cname,    /*u1=u,x1=x,v1=v*/    //不要用对象的方式 因为对象可能为null那么对象.属性就会抛异常    }    
).ToList();    for (var i = 0; i < list.Count(); i++)    
{    Console.WriteLine(list[i].name + '\t' + list[i].jname + '\t' + list[i].cname); //字段为null不报异常    //Console.WriteLine(list[i].u1.name+'\t'+list[i].x1.jname+'\t'+list[i].v1.cname+"\r\n"); //对象x1 v1 有可能为null 抛异常    
}    
Console.ReadLine();  

14. 实例用法:

//数据库 + 自定义名称 =new 数据库  
mydbDataContext con = new mydbDataContext();  //模糊查询表达式中用.Contains  
con.car.Where(r=>r.name.Contains(TextBox1.Text.Trim())).ToList(;  //开头查用.StartWith  
con.car.Where(r => r.name.StartsWith(TextBox1.Text)).ToList();  //结尾查用.EndWith  
con.car.Where(r => r.name.EndsWith(TextBox1.Text)).ToList();  //最大值  
con.car.Max(r => r.price * r.oil).ToString();  //最小值  
con.car.Min(r => r.price).ToString();  //求和  
con.car.Sum(r => r.price).ToString();  //平均值  
con.car.Average(r => r.price).ToString();  //升序:  
con.car.OrderBy(r => r.price).ToList();  //降序:  
con.car.OrderByDescending(r => r.price).ToList();  //上一页,下一页,组合查询:  
int PageCount = 5;//每页显示条数  //上一页,PageCount_Label.Text为当前页码  
int pageNum = Convert.ToInt32(PageCount_Label.Text) - 1;  
Repeater1.DataSource = con.car.Skip((pageNum - 1) * PageCount).Take(PageCount);  
Repeater1.DataBind();   
PageCount_Label.Text = pageNum.ToString();  //下一页  
int pageNum = Convert.ToInt32(PageCount_Label.Text) + 1;  
Repeater1.DataSource = con.car.Skip((pageNum - 1) * PageCount).Take(PageCount);  
Repeater1.DataBind();  
PageCount_Label.Text = pageNum.ToString();  //组合查询的点击事件  
List<car> list = con.car.ToList();  
if (TextBox2.Text != "")  
{  List<car> list1 = con.car.Where(r => r.name.Contains(TextBox2.Text)).ToList();  list = list.Intersect(list1).ToList();  
}  
if (TextBox3.Text != "")  
{  List<car> list1 = con.car.Where(r => r.oil == Convert.ToDecimal(TextBox3.Text)).ToList();  list = list.Intersect(list1).ToList();  
}  
if (TextBox4.Text != "")  
{  List<car> list1 = con.car.Where(r => r.powers == Convert.ToInt32(TextBox4.Text)).ToList();  list = list.Intersect(list1).ToList();  
}  
Repeater1.DataSource = list;  
Repeater1.DataBind();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/6670.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Spring Boot Admin】客户端服务无法注册到监控平台的相关问题及解决方案

1、客户端服务整合了Spring Security 通过URL注册&#xff0c;需在客户端服务中添加如下配置 spring:# spring boot adminboot:admin:client:instance:metadata:user.name: ${spring.security.user.name}user.password: ${spring.security.user.password}通过注册中心注册&am…

Mysql 数据库开发及企业级应用

文章目录 1、Mysql 数据库开发及企业级应用1.1、为什么要使用数据库1.1.1、数据库概念&#xff08;Database&#xff09;1.1.2、为什么需要数据库 1.2、程序员为什么要学习数据库1.3、数据库的选择1.3.1、主流数据库简介1.3.2、使用 MySQL 的优势1.3.3、版本选择 1.4、Windows …

Redis 执行Lua脚本

Redis 执行lua 脚本 redis incr 命令当Key不存在时会默认设置key 并自增为1,如果需要在key不存在时重新初始化key 可以在应用程序中判断&#xff0c;也可以直接使用lua脚本 Redis 执行lua脚本命令 Script load 将脚本 script 添加到Redis服务器的脚本缓存中&#xff0c;并不…

介绍Tensorflow的基本概念和场景

TensorFlow是一种开源的机器学习框架&#xff0c;由Google开发&#xff0c;用于构建和训练人工神经网络。它使用图形表示来表示数学计算&#xff0c;其中节点表示操作&#xff0c;边表示数据流。以下是TensorFlow的基本概念&#xff1a; Tensor&#xff1a;TensorFlow的计算单位…

神经网络随记-参数矩阵、剪枝、模型压缩、大小匹配、、

神经网络的参数矩阵 在神经网络中&#xff0c;参数矩阵是模型学习的关键部分&#xff0c;它包含了神经网络的权重和偏置项。下面是神经网络中常见的参数矩阵&#xff1a; 权重矩阵&#xff08;Weight Matrix&#xff09;&#xff1a;权重矩阵用于线性变换操作&#xff0c;将输…

k8s+containerd安装

准备环境 准备两台服务器节点&#xff0c;如果需要安装虚拟机&#xff0c;可以参考《wmware和centos安装过程》 机器名IP角色CPU内存centos01192.168.109.130master4核2Gcentos02192.168.109.131node4核2G 设置主机名&#xff0c;所有节点都执行 vim /etc/hosts #增加 192.…

【VUE】解决图片视频加载缓慢/首屏加载白屏的问题

1 问题描述 在 Vue3 项目中&#xff0c;有时候会出现图片视频加载缓慢、首屏加载白屏的问题 2 原因分析 通常是由以下原因导致的&#xff1a; 图片或视频格式不当&#xff1a;如果图片或视频格式选择不当&#xff0c;比如选择了无损压缩格式&#xff0c;可能会导致文件大小过大…

unity 控制text根据字数自动扩展大小,并扩展UI背景

需求&#xff1a;文字内容位置保持不变&#xff0c;向下增加&#xff0c;背景框随之同步扩展。 1.UGUI 九宫格 拉伸 对背景框图片资源处理&#xff0c;避免图片拉伸。 (10条消息) unity UGUI 九宫格 拉伸_unity九宫格拉伸_野区捕龙为宠的博客-CSDN博客 2.背景框添加组件 3.…

【C#】set和get访问器的使用例子

假设我们有一个名为Person的类&#xff0c;该类具有一个私有字段_age表示人的年龄。我们可以使用get和set访问器来访问和修改该字段。 csharp public class Person { private int _age; public int Age { get > _age; // get访问器用于获取_age的值 set > _age value; /…

mysql 自增长键值增量设置

参考文章 MySQL中auto_increment的初值和增量值设置_auto_increment怎么设置_linda公馆的博客-CSDN博客 其中关键语句 show VARIABLES like %auto_increment% set auto_increment_increment4; set auto_increment_offset2;

php裁剪图片,并给图片加上水印

本次以裁剪四个图片为例&#xff0c;图片如下 代码如下 public function cutImg($imgUrl){try{// 读取原始图片$src_img imagecreatefromjpeg($imgUrl);// 获取原始图片的宽度和高度$src_width imagesx($src_img);$src_height imagesy($src_img);// 计算每个部分的宽度和高…

【数字信号处理】带通采样定理及其MATLAB仿真

目录 一、带通采样定理1.1 内容1.2 公式推导 二、MATLAB信号仿真2.1 信号仿真实验2.2 MATLAB代码 三、总结参考 一、带通采样定理 按照奈奎斯特采样定理(低通采样)&#xff0c;采样频率 f s f_{s} fs​ 要大于等于信号中最高频率 f m a x f_{max} fmax​ 的2倍&#xff0c;才…

C++OpenCV(2):图像处理基础概念与操作

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 &#x1f506; OpenCV项目地址及源代码&#xff1a;点击这里 文章目录 图形读取与显示加载图片显示图片打印图片信息保存图片 色彩模型转换RGB颜色模型HSV颜色模型HLS模型LAB模型 图像像素读写操作像素算数运…

macOS 源码编译 qpress

╰─➤ git clone https://github.com/PierreLvx/qpress.git ╰─➤ cd qpress ╰─➤ make g -O3 -o qpress -x c quicklz.c -x c qpress.cpp aio.cpp utilities.cpp -lpthread -Wall -Wextra -Werror ╰─➤ sudo make install …

怎么快速定位bug?怎么编写测试用例?

目录 01定位问题的重要性 02问题定位技巧 03初次怎么写用例 作为一名测试人员如果连常见的系统问题都不知道如何分析&#xff0c;频繁将前端人员问题指派给后端人员&#xff0c;后端人员问题指派给前端人员&#xff0c;那么在团队里你在开发中的地位显而易见 &#xff0c;口碑…

垃圾回收标记阶段算法

1.标记阶段的目的 主要是在GC在前&#xff0c;判断出哪些是有用的对象&#xff0c;哪些是需要回收的对象&#xff0c;只有被标记为垃圾对象&#xff0c;GC才会对其进行垃圾回收。判断对象是否为垃圾对象的两种方式&#xff1a;引用计数算法和可达性分析算法。 2.引用计数算法…

[QT编程系列-33]:科学计算 - 开源数值计算库GNU Scientific Library(简称GSL)

目录 第1章 简介 1.1 概述 1.2 主要功能 1.3 C接口 1.4 在QT中使用GSL的步骤 第2章 GSL C函数库 2.1 功能概述 2.2 代码示例 第1章 简介 1.1 概述 GNU Scientific Library&#xff08;简称GSL&#xff09;是一个开源数值计算库&#xff0c;旨在提供各种数学和科学计算…

如何搭建使用dubbo-Admin?

dubbo-Admin介绍 一款用于dubbo可视化界面操作的管理平台 dubbo-Admin特点 dubbo-Admin是dubbo的管理界面平台&#xff0c;且是一个前后端分离的项目&#xff0c;前端使用vue&#xff0c;后端使用springboot。 软件下载 dubbo-admin-0.5.0.zip 软件使用

base-R(又称为基础R)中的apply函数族

说明&#xff1a;此为学习baseR中apply函数族笔记&#xff0c;仅学习使用。 C编程语言使用循环&#xff0c;但是R软件提倡使用向量化操作和apply系列函数来批量处理数据&#xff0c;从而大大简化了计算&#xff0c;提高代码的速度、可读性和可维护性。其实&#xff0c;大部分ap…

【力扣】74. 搜索二维矩阵 <二分法>

【力扣】74. 搜索二维矩阵 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非递减顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&am…