Linq表达式和Lambda表达式用法对比

什么是Linq表达式?什么是Lambda表达式?
前一段时间用到这个只是,在网上也没找到比较简单明了的方法,今天就整理了一下相关知识,有空了再仔细研究研究

public Program()
{
List<Student> allStudent = new List<Student> {
new Student("张三",23),
new Student("李四",29),
new Student("王二",25),
new Student("赵六",26)
};
//Ling表达式
var stus1 = from s in allStudent
where s.Name == "王二"
select new { s.Name, s.Age };
//Lanmbda表达式
var stus2 = allStudent.Where(t => t.Name == "王二").Select(t => new { t.Name, t.Age });
}public class Student
{
public string Name { set; get; }
public int Age { set; get; }
public Student(string name, int age)
{
this.Name = name;
this.Age = age;
}
}
Lambda确实比Linq表达式更加优雅
Linq表达式的select不能省略
//Linq
var students1 = from t in db.Students
where t.Name == "张三"
select t;
//Lambda
var students2 = db.Students
.Where(t => t.Name == "张三");Linq表达式必须需要括号包裹起来才能取结果集
//Linq
var students1 = (from t in db.Students
where t.Name == "张三"
select t).ToList();
//Lambda
var students2 = db.Students
.Where(t => t.Name == "张三")
.ToList();

 

什么时候使用Linq?
通过上面的对比,好像Linq一文不值了。no,不是这样的。
比如下面几种情况我们就可以选择使用Linq:
例一:(本例适用于Linq to Object 和 没有建主外键的EF查询)
Lambda中的Join需要传四个参数表达式,是不是有点晕了。。。

var list1 = new Dictionary<string, string> { { "1", "张三" }, { "2", "李四" }, { "3", "张三" }, { "4", "张三" } };
var list2 = new Dictionary<string, string> { { "1", "张三" }, { "2", "李四" }, { "3", "李四" }, { "4", "张三" } };//Linq
var obj1 = from l1 in list1
join l2 in list2
on l1.Key equals l2.Key
select new { l1, l2 };
//Lambda
var obj = list1.Join(list2, l1 => l1.Key, l2 => l2.Key, (l1, l2) => new { l1, l2 });

 

例二:
Lambda需要区分OrderBy、ThenBy有没有觉得麻烦

//Linq
var obj1 = from l1 in list1
join l2 in list2
on l1.Key equals l2.Key
orderby l1.Key, l2.Key descending
select new { l1, l2 };
//Lambda
var obj = list1.Join(list2, l1 => l1.Key, l2 => l2.Key, (l1, l2) => new { l1, l2 })
.OrderBy(li => li.l1.Key)
.ThenByDescending(li => li.l2.Key)
.Select(t => new { t.l1, t.l2 });

 


总觉得Linq更多的只是为了照顾那些写惯了sql的程序员。

联接查询(内联、左联、交叉联)

关于联接查询使用Linq会更合适一些这个上面已经说了。
接下来我们写内联、左联、交叉联的Linq和对应的Lambda代码。(目的:可能有些人不会,同时在这里也给自己做个备忘)
内联:

var list1 = new Dictionary<string, string> { { "1", "张三" }, { "2", "李四" }, { "3", "张三" }, { "4", "张三" } };
var list2 = new Dictionary<string, string> { { "1", "张三" }, { "2", "李四" }, { "3", "李四" }, { "4", "张三" } };
//Linq查询
var ojb2 = (from l1 in list1
join l2 in list2
on l1.Key equals l2.Key
select new { l1, l2 }).ToList();
//Lambda查询
var obj = list1.Join(list2, l1 => l1.Key, l2 => l2.Key, (l1, l2) => new { l1, l2 }).ToList();

 

左联:

var list1 = new Dictionary<string, string> { { "1", "张三" }, { "2", "李四" }, { "3", "张三" }, { "4", "张三" } };
var list2 = new Dictionary<string, string> { { "1", "张三" }, { "2", "李四" }, { "3", "李四" }, { "4", "张三" } };
//Linq查询
var ojb2 = (from l1 in list1
join l2 in list2
on l1.Key equals l2.Key into list
from l2 in list.DefaultIfEmpty()
select new { l1, l2 }).ToList();
//Lambda查询
var obj = list1.GroupJoin(list2, l1 => l1.Key, l2 => l2.Key, (l1, l2) => new { l1, l2=l2.FirstOrDefault() }).ToList();

 

交叉联:

var list1 = new Dictionary<string, string> { { "1", "张三" }, { "2", "李四" }, { "3", "张三" }, { "4", "张三" } };
var list2 = new Dictionary<string, string> { { "1", "张三" }, { "2", "李四" }, { "3", "李四" }, { "4", "张三" } };
//Linq查询
var ojb2 = (from l1 in list1
from l2 in list2
select new { l1, l2 }).ToList();
//Lambda查询
var obj = list1.SelectMany(l1 => list2.Select(l2 => new { l1,l2})).ToList();

 

FROM :http://www.cnblogs.com/zhaopei/p/5746414.html

转载于:https://www.cnblogs.com/chunhui212/p/5899158.html

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

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

相关文章

使用FlexDeploy对融合中间件应用程序进行自动化软件测试

自动化软件测试是任何软件组织都应执行的强制性活动之一&#xff0c;以保证其产品质量。 但是&#xff0c;此过程通常变得非常复杂&#xff0c;尤其是涉及由多个不同部分组成的现代复杂系统的自动化测试时。 所有这些部分都基于不同的技术&#xff0c;显然&#xff0c;应该使用…

uploadify插件的使用

插件&#xff1a; uploadify.css jquery.uploadify.js bootstrap html代码&#xff1a; <input type"file" name"uploadify_coverimg" id"uploadify" /> <div id"the_coverimg"></div> js代码&#xff1a; $("…

wxlogin php,wxlogin.php

if($_GET[echostr]){echo $_GET[echostr];die();}/*** 开发规范&#xff1a;* 1.不同版本不同控制器以及模板* 2.不同版本不同数据库&#xff0c;但是对应数据表表结构必须一致* 3.不同版本共用service层&#xff0c;所以修改表结构必须所有版本统一*/// ---------------------…

关于人生倒计时的一个小玩意,纯属业余

人生倒计时 人生倒计时 出生年份&#xff1a; 出生月份&#xff1a; <!DOCTYPE html> <html id"spLianghui"> <head><meta http-equiv"Content-Type" content"text/html; charsetgb2312" /><title>人生倒计时<…

java 反编译项目_Java 7 –反编译项目硬币

java 反编译项目大家好&#xff0c;该是从2012年开始写作的时候了。正如您在其他博客中可能已经看到的那样&#xff0c;有一些更改可以使您使用Java编程时的开发人员生活变得更加轻松&#xff1a;Diamond运算符&#xff0c;Switchs中的Strings&#xff0c;尝试使用资源&#xf…

日期格式无法识别 oracle,Oracle时间统计 - 不以物喜-不以己悲的个人空间 - OSCHINA - 中文开源技术交流社区...

select count(*) from Member_user where to_char(CREATEDATE,yyyy-mm-dd)to_char(sysdate,yyyy-mm-dd); --今天select count(*) from Member_user where to_char(CREATEDATE,dd)to_char(sysdate,dd); --当天&#xff0c;所有月份的这个号select count(*) from Member_user whe…

JavaOne 2015继续,Java将永远存在(……也许是长篇大论)

好的。 也许我的标题太夸张了。 我确实相信Java&#xff0c;生态系统&#xff0c;社区&#xff0c;虚拟机和母编程语言将会存在很长一段时间。 有什么可以偏离的&#xff1f; 假设在我的酒店房间中花费大量时间&#xff0c;在我的演讲中增加技巧之间&#xff0c;我认为这将是一…

生产上oracle扩展表空间,oracle基于裸设备(raw device)扩充表空间

首先在oracle中查询表空间的使用情况&#xff0c;确认是哪个表空间不足。select df.tablespace_name “Tablespace”,df.bytes/(1024*1024) “Total Size(MB)”, sum(fs.bytes)/(1024*1024) “Free Size(MB)”, round(sum(fs.bytes)*100/df.bytes) “% Free”, round((df.bytes…

VC包含目录、附加依赖项、库目录及具体设置

包含目录&#xff1a;#include <headerfile.h>中headerfile.h的搜索目录。如果有XXX.h找不到&#xff0c;设置这个目录可以解决。附加依赖项&#xff1a;C的库会把函数、类的声明放在*.h中&#xff0c;实现放在*.cpp或*.cc中。编译之后&#xff0c;*.cpp&#xff0c;*.cc…

oracle catalog命令,db2 catalog tcpip 命令咨询?

使用 CLP 从客户机编目 TCP/IP 节点编目 TCP/IP 节点会在描述远程节点的 DB2 客户机节点目录添加一个条目。此条目指定客户机用来访问远程主机所选择的别名(node_name)、hostname(或 ip_address)和 svcename(或 port_number)。必须具有“系统管理”(SYSADM)或“系统控制器”(SY…

Java 9代码工具:使用Java微型基准测试工具的实践会话

用肉眼看&#xff0c;基准测试似乎只是确定执行某些代码需要花费多长时间的简单问题。 但是通常&#xff0c;这是幼稚的方法。 提供具有准确和可重复结果的有意义的基准并非易事。 在本文中&#xff0c;我们想向您介绍OpenJDK代码工具项目&#xff0c;尤其是JMH。 Java Microb…

Quartz 第六课 CronTrigger(官方文档翻译)

CronTriggers使用的频率比SimpleTrigger跟高。如果需要schedule 中触发Job的方式类似于日历的形式而不是一个确定的是时间间隔&#xff0c;那就需要使用CronTrigger。 对于CronTrigger&#xff0c;你可以触发Schedule&#xff0c;例如每个周五中午或者每个工作日的下午9:30或者…

centos 6.6 oracle 10g,centos 6.2 安装 oracle 10g 问题

问题一&#xff1a;正在启动 Oracle Universal Installer...正在检查安装程序要求...检查操作系统版本: 必须是redhat-3, SuSE-9, redhat-4, UnitedLinux-1.0, asianux-1or asianux-2未通过<<<<正在退出 Oracle Universal Installer。您可以在/tmp/OraInstall2002-…

查看本地文档的一些方法

1. 某目录下临时开web服务器 cd some_dir python -m SimpleHTTPServer 9090 9090手动指定的端口&#xff0c;然后使用http://localhost:9090来访问。下同&#xff0c;不赘述。 2. python文档 pydoc -p 9090 3. matlab文档 cd %MATLAB_DIR%\help # e.g. G:\soft\MATLAB\R2016a\…

oracle sql为null值,在SQL Server Oracle MySQL当数据库中查出某值为NULL怎么办

在SQL Server Oracle MySQL当数据库中查出某值为NULL怎么办?1、MSSQL: ISNULL()语法ISNULL ( check_expression , replacement_value )参数check_expression将被检查是否为 NULL的表达式。check_expression 可以是任何类型的。replacement_value在 check_expression 为 NULL时…

SQL入门语句之LIKE、GLOB和LIMIT

一、SQL入门语句之LIKE LIKE用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配&#xff0c;LIKE 运算符将返回真&#xff08;true&#xff09;&#xff0c;也就是 1。这里有两个通配符与 LIKE 运算符一起使用,百分号&#xff08;%&#xff09;代表零个、一个或多…

vaadin_在Vaadin和JSF之间选择

vaadin随着最新版本的Primefaces 3.0的发布&#xff0c;JSF终于达到了前所未有的成熟度和实用性&#xff0c;使其与其他流行的Rich Internet Applications&#xff08;RIA&#xff09;选项面对面&#xff0c;例如Google Web Toolkit&#xff08;GWT&#xff09;&#xff0c;Ext…

windows server 2008 oracle 10g,一次不太愉快的Windows Server 2008 R2 SP1上安装ORACLE 10G经历...

华为服务器型号RH5885 V3&#xff0c;安装windows server 2008 r2, oracle 10g1、安装包要使用10204_vista_w2k8_x64_production_db.zip&#xff0c;不用102010_win64_x64_database.zip&#xff1b;2、DBCA创建数据库之前&#xff0c;关闭BIOS中Hyper-Threading [ALL] - [Disab…

通过OmniFaces缓存组件以编程方式缓存PrimeFaces图表

在这篇文章中&#xff0c;您将看到如何结合PrimeFaces和OmniFaces获得可缓存的图表。 为了使事情变得简单&#xff0c;我们将使用PrimeFaces 折线图。 对于这种图表&#xff0c;我们可以在页面中使用<p&#xff1a;chart />标记和一个简单的托管bean。 因此&#xff0c;在…

ReactNative——打包发布

1、生成一个签名密钥 ‘ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000 ’ 生成一个my-release-key.keystore的密钥库文件 2、找到路径/android/app/src/main,并在该目录下新建assets文件夹 3、在工程…