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 的本质的更多相关文章

  1. csharp: Linq keyword example

    /// <summary> /// http://www.dotnetperls.com/linq /// </summary> public partial class Li ...

  2. C#基础提升系列——C# LINQ

    C# LINQ LINQ(Language Integrated Query,语言集成查询).在C# 语言中集成了查询语法,可以用相同的语法访问不同的数据源. 命名空间System.Linq下的类En ...

  3. entity framework 新手入门篇(1.5)-lambda表达式与linq

    在建立好了EF模型之后,先不着急使用它,在使用它之前,你还需要了解两个相关的技术,lambda表达式与linq. 作为微软C#语言中重要的语法糖-lambda表达式与LINQ,本质都是一个方法,以la ...

  4. C#学习笔记(九):LINQ和表达式树

    LINQ LINQ:语言集成查询(Language Integrated Query)是一组用于c#和Visual Basic语言的扩展.它允许编写C#或者Visual Basic代码以查询数据库相同 ...

  5. C#的LINQ

    在过去如果我们如果需要去查询某些集合或者数组里面的某些元素,我们需要写出大量的带有筛选的遍历集合的代码,但是有了Linq之后,我们就不用写出那些冗余麻烦的遍历代码,只需要关注其中的筛选,排列的函数就可 ...

  6. LINQ 常规实践总结

    1.Linq 执行多列排序 OrderBy的意义是按照指定顺序排序,连续两次OrderBy,后面一个有可能会打乱前面一个的排序顺序,可能与预期不符. 要实现sql中的order by word,nam ...

  7. 再次理解 C# LINQ

    语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称. 查询表达式(生成表达式) 1.IEnumerable<T> 查询编译为委托.如 source.Where( ...

  8. LINQ解析

    Linq 是什么? Linq是Language Integrated Query的缩写,即“语言集成查询“的意思,Linq的提出就是为了提供一种跨各种数据源统一查询方式,主要包含四种组件:Linq t ...

  9. Linq的左链接

    地址:https://docs.microsoft.com/en-us/dotnet/csharp/linq/perform-left-outer-joins ①创建两张表和一些基础数据做我们的测试 ...

  10. Linq Introduce

    Linq学习网址: http://www.java2s.com/Code/CSharp/LINQ/CatalogLINQ.htm

随机推荐

  1. 从redis中取出数据并转成java对象

    1.//数据存入redis中 redisTemplate.opsForValue().set(loginame, JSON.toJSONString(users),1000,TimeUnit.SECO ...

  2. WSL2与ensp的40故障

    在使用ensp做radius认证的时候看到了Linux平台的freeradius认证服务器,于是使用了Windows平台的sub system: WSL2,按照网上的教程安装,并且安装了docker ...

  3. python+pytest接口自动化

    本篇文章是用python+pytest写了一个简单的接口自动化脚本,外加循环请求接口的语法,大家可以参考~ 实例一: import requestsimport pytestimport time c ...

  4. 记录jupyter lab 多个kernel混乱的问题

    问题描述 在Anaconda下我有多个虚拟环境,其中一个叫d2l,由于pytorch版本和cuda算力不匹配,重新create了一个环境:d2l_new.然后环境配置好了之后激活环境,启动jupyte ...

  5. spring security添加接口白名单

    在项目中遇到的问题是要将某个接口设为白名单,无需验证即可被用户使用. 解决方法: 在nacos配置文件中ignore whites(不校验白名单)中添加对应接口,无gateway前缀即可,添加立即生效 ...

  6. C++ PTA 小于m的最大的10个素数

    7-5 小于m的最大的10个素数 (15分) 给定一个整数m(50<m<20000),找出小于m的最大的10个素数. 输入格式: 输入在一行中给出一个正整数m(50<m<200 ...

  7. 如何卸载powermill?怎么把powermill彻底卸载删除干净重新安装的方法【转载】

    如何卸载powermill?怎么把powermill彻底卸载删除干净重新安装的方法.powermill显示已安装或者报错出现提示安装未完成某些产品无法安装的问题,怎么完全彻底删除清理干净powermi ...

  8. js 获取鼠标位置的两种方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. ubuntu14搭建内网gitlab服务器

    平台 宿主机系统版本:Ubuntu 14.04.5 LTS gitlab软件版本:11.10.8-ee 验证web浏览器版本:Mozilla Firefox 68.3.0esr 安装firefox浏览 ...

  10. python 实现视频流下载保存MP4

    # -*- coding:utf-8 -*-import sysimport osfrom glob import globimport requests reload(sys)sys.setdefa ...