CSharp linq 的本质
linq 的本质是扩展方法和委托的结合
链式 linq 和 方法级linq
List<int> list = new List<int>() {
3,9,32,7
};
// linq 分为链式 和方法级linq
//链式的写法如下
var q = from temp in list where temp > 6 select temp;
//方法级linq 如下
var q1 = list.Where(temp => temp > 6).Select(temp=>temp);
//通过反编译可以看出链式linq 最终都是要翻译为方法级linq ,这点可以大伙可以自行尝试
自定义自己的linq查询
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<int> list = new List<int>() {
3,9,32,7
};
//找出大于6 的数,我们很自然的会使用linq 来查询
var newList = list.Where(x => x > 6);
//linq 的本质是什么呢? linq的本质是 扩展方法和委托的结合
var newList2 = list.CustomerWhere(x => x > 6);
foreach (var item in newList)
{
Console.WriteLine(item);
}
Console.WriteLine("---------------");
foreach (var item in newList2)
{
Console.WriteLine(item);
}
Console.ReadKey();
}
}
/// <summary>
/// 自定义一个扩展方法, 要点:静态类的静态方法,this 要扩展的类型 其余参数
/// </summary>
static class CustomerWhereExtension
{
public static List<int> CustomerWhere(this List<int> list, Func<int, bool> predict)
{
List<int> tempList = new List<int>();
foreach (var item in list)
{
if (predict.Invoke(item))
{
tempList.Add(item);
}
}
return tempList;
}
}
}
运行结果如下

CSharp linq 的本质的更多相关文章
- csharp: Linq keyword example
/// <summary> /// http://www.dotnetperls.com/linq /// </summary> public partial class Li ...
- C#基础提升系列——C# LINQ
C# LINQ LINQ(Language Integrated Query,语言集成查询).在C# 语言中集成了查询语法,可以用相同的语法访问不同的数据源. 命名空间System.Linq下的类En ...
- entity framework 新手入门篇(1.5)-lambda表达式与linq
在建立好了EF模型之后,先不着急使用它,在使用它之前,你还需要了解两个相关的技术,lambda表达式与linq. 作为微软C#语言中重要的语法糖-lambda表达式与LINQ,本质都是一个方法,以la ...
- C#学习笔记(九):LINQ和表达式树
LINQ LINQ:语言集成查询(Language Integrated Query)是一组用于c#和Visual Basic语言的扩展.它允许编写C#或者Visual Basic代码以查询数据库相同 ...
- C#的LINQ
在过去如果我们如果需要去查询某些集合或者数组里面的某些元素,我们需要写出大量的带有筛选的遍历集合的代码,但是有了Linq之后,我们就不用写出那些冗余麻烦的遍历代码,只需要关注其中的筛选,排列的函数就可 ...
- LINQ 常规实践总结
1.Linq 执行多列排序 OrderBy的意义是按照指定顺序排序,连续两次OrderBy,后面一个有可能会打乱前面一个的排序顺序,可能与预期不符. 要实现sql中的order by word,nam ...
- 再次理解 C# LINQ
语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称. 查询表达式(生成表达式) 1.IEnumerable<T> 查询编译为委托.如 source.Where( ...
- LINQ解析
Linq 是什么? Linq是Language Integrated Query的缩写,即“语言集成查询“的意思,Linq的提出就是为了提供一种跨各种数据源统一查询方式,主要包含四种组件:Linq t ...
- Linq的左链接
地址:https://docs.microsoft.com/en-us/dotnet/csharp/linq/perform-left-outer-joins ①创建两张表和一些基础数据做我们的测试 ...
- Linq Introduce
Linq学习网址: http://www.java2s.com/Code/CSharp/LINQ/CatalogLINQ.htm
随机推荐
- EF存储过程
select * from Goods --创建存储过程create proc sp_Show( @index int, --当前页 @size int, --每页大小 @totalcount int ...
- entries
let arr = [1,2,3,4,5,6,7]; for (let [index, leaflet] of arr.entries()){ console.log(index,leaflet) }
- [自用初学]c++值传递和引用传递/ *&/ string
https://baijiahao.baidu.com/s?id=1702573193376441989&wfr=spider&for=pc 总结: 1.函数参数传递主要分为值传递和& ...
- ICMP-ping报错类型
ICMP数据包的包头,两个重要字段Type和Code,如图所示 ICMP消息类型和编码类型 回显请求包,正常为80 回显回复包,正常为00 其余均为报错类型. 超时:对方主机不在线.屏蔽等 传输失败: ...
- python3GUI--天气预报小工具By:PyQt5(附源码)
@ 目录 一.准备工作 二.预览 1.启动 2.添加城市 三.设计流程 1.UI设计(草图) 2.UI设计(QT设计师) 3.解释 四.源代码 五.总结 之前用tk写过一款python3GUI--天气 ...
- Arduino教程目录
目录 第一节.安装Arduino开发环境 第二节.第一个HelloWorld 第二节续.LED操作 呼吸灯 流水灯 正在加快制作,大家可以先看下面的视频了解基本语法,我准备基础课程和实际项目结合讲解. ...
- 09 Hive安装与操作
一.安装Hive 下载解压重命名权限 配置环境变量 修改Hive配置文件 修改/usr/local/hive/conf下的hive-site.xml 1 2 3 4 5 6 7 8 9 10 11 1 ...
- Web_Servlet和jsp页面数据交互,通过请求转发在jsp中显示数据
1.Servlet页面代码 /* 实现jsp页面和sevlet页面的信息交互 */ @WebServlet(urlPatterns = "/aa") public class Js ...
- ARM-linux的Windows交叉编译环境搭建
交叉编译Arm Linux平台的QT5库 1.准备交叉编译环境 环境说明:Windows10 64位 此过程需要: (1)Qt库开源代码,我使用的是5.13.0版本: (2)Perl语言环境5.12版 ...
- 子接口vlan终结
问题: 在华为的NE40E设备上,配置三层字接口的ip后,接口的physical状态为up, protocol为down,接口还是不可用. 解决方案: 需要在子接口上配置vlan终结,配置如下: 为什 ...