前言

对linq进行整理,分为前序、中序和后序。

前序就是一些简单的概念和模拟。

中序的话就是深挖一些思想。

后序对其进行解刨。

正文

语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。 数据查询历来都表示为简单的字符串,没有编译时类型检查或 IntelliSense 支持。 此外,需要针对每种类型的数据源了解不同的查询语言:SQL 数据库、XML 文档、各种 Web 服务等。

这样看,似乎有点难以理解。

回过头来,这样想下。什么能使用linq,那么就需要实现linq的规则。如果没有,那么适配也可以实现。

告诉我们,要实现select,那么我们就给他实现呗。

然后我实现了这个:

class txt
{
public txt Select(Func<int, txt> selector)
{
return new txt();
}
}

然后调用:

txt a = new txt(); 

var scoreQuery =
from score in a
select score; Console.WriteLine(scoreQuery);

可以调用出来啊。

那么:

范围变量和数据源都是强类型。from 子句中引用的数据源的类型必须为 IEnumerable、IEnumerable<(Of <(T>)>) 或一种派生类型(如 IQueryable<(Of <(T>)>))。

就不完全正确。可以实现自己的一套机制。

再举个栗子:



调用:

txt a = new txt(); 

var scoreQuery =
from score in a
select score[0]; Console.WriteLine(scoreQuery);

解析:

如果上面没解释好,那么下面就是详细解析了。

from score in a 是什么意思呢?

是调用a中的select,将会传入一个score。

所以这个score 是我们调用selector invoke 传入的值。

那么这个委托:

就是:

返回过来,selector就是:

function x(List<txt> y){
return y[0];
}

然后返回的值,就是select 返回的值。

其他的where 也一样。

最后为了深刻理解,那我来写一个模拟例子:

class txt
{
public string Name { get; set; } public int Value { get; set; } public txt next { get; set; }
public List<T> Select<T>(Func<txt,T> selector)
{
List<T> lst = new List<T>();
txt temp = this;
while(temp!=null)
{
lst.Add(selector.Invoke(this));
} return lst;
}
}

调用:

txt a = new txt();
a.Name = "a";
a.Value = 1;
txt b = new txt();
b.Name = "b";
b.Value = 2;
var scoreQuery =
from score in a
select score.Name;
Console.WriteLine(scoreQuery);

然后最后埋一个影子:

查询表达式可被编译成表达式树或委托,具体视应用查询的类型而定。 IEnumerable<T> 查询编译为委托。 IQueryable 和 IQueryable<T> 查询编译为表达式树。

linq 整理(前序)的更多相关文章

  1. 整理一下 System.Linq.Enumerable 类中的那些比较少用的方法

    Linq 虽然用得多,但是里面有一些方法比较少用,因此整理一下.Enumerable 类的所有方法可以在 MSDN 上查阅到:https://msdn.microsoft.com/zh-cn/libr ...

  2. linq用法整理

    linq用法整理 普通查询 var highScores = from student in students where student.ExamScores[exam] > score se ...

  3. C#规范整理·集合和Linq

    LINQ(Language Integrated Query,语言集成查询)提供了类似于SQL的语法,能对集合进行遍历.筛选和投影.一旦掌握了LINQ,你就会发现在开发中再也离不开它.   开始! 前 ...

  4. C#基础:LINQ 查询函数整理

    1.LINQ 函数   1.1.查询结果过滤 :where() Enumerable.Where() 是LINQ 中使用最多的函数,大多数都要针对集合对象进行过滤,因此Where()在LINQ 的操作 ...

  5. Linq小整理

    Linq(Language Integrated Query)中文翻译为语言集成查询 (1)源起 .net的设计者在类库中定义了一系列的扩展方法 来方便用户操作集合对象 这些扩展方法构成了LINQ的查 ...

  6. 有关 Lambda && linq练习 有待整理

    1. 查询Student表中的所有记录的Sname.Ssex和Class列.(select sname,ssex,class from student) Students.Select(s=> ...

  7. EF 拉姆达 linq if else (整理)

    首先想到: var data0 = db.T_Plants2; //这里加.AsQueryable() ) { .Where(d => d.NaturalEcosystem == true); ...

  8. Linq to SQL 语法整理(子查询 & in操作 & join )

    子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c in ctx.Customers where (from o in ctx.Orders group o by ...

  9. 拼linq 时网上整理的一个类

    public static class DynamicLinqExpressions { public static Expression<Func<T, bool>> Tru ...

随机推荐

  1. 返回boolean的mybatis查询

    注意:返回数量为0时函数返回值为false,返回数量为非零值时为true. Java函数: boolean hasSameServiceCode(@Param("oldDepotCd&quo ...

  2. MyBatis的逆向工程、Example类

    public void testFindUserByName(){ //通过criteria构造查询条件 UserExample userExample = new UserExample(); us ...

  3. Redis6.0.6集群服务搭建

    实现目标 一台主机上搭建3主3从高可用redis集群 环境 Linux :CentOS7 Redis : 6.0.6 准备工作 1.查看是否有安装wget命令,如果没有安装使用yum命令安装wgt命令 ...

  4. jmeter连接websocket wss

    注:域名的默认端口号是443 1.先添加 WebSocket Open Connection:连接请求 2.再添加 WebSocket request-response Sampler:发送数据请求 ...

  5. docker容器数据持久化

    将数据从宿主机挂载到容器中的三种方式 1.Volume 2.Bind Mounts 3.tmpfs Volumes:docker管理宿主机文件系统的一部分(/var/lib/docker/volume ...

  6. 《Head First 设计模式》:组合模式

    正文 一.定义 组合模式允许你将对象合成树形结构来表现"整体/部分"层次结构.组合能让客户以一致的方式处理组合对象以及个体对象. 组合对象:包含其他组件的组件. 个体对象(叶节点对 ...

  7. 最全总结 | 聊聊 Python 数据处理全家桶(Mysql 篇)

    1. 前言 在爬虫.自动化.数据分析.软件测试.Web 等日常操作中,除 JSON.YAML.XML 外,还有一些数据经常会用到,比如:Mysql.Sqlite.Redis.MongoDB.Memch ...

  8. 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)请自取

    最近在读,附上网盘链接 复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1U6yFeZxz9uD6sSiu-Br06g 提取码:3Wt4

  9. MyBatis学习(二)代码实战

    一.项目依赖 本项目是基于mybatis3.4.6版本实现的,用到的jar包如下 二.项目结构解析 三.配置文件解析 四.mapper文件解析 <?xml version="1.0&q ...

  10. oracle数据库外部连接无法访问

    服务器出现的问题是运行的项目无法访问oracle数据库连接,用plsql输入用户名密码后卡死,无法连接.但是通过命令窗口对oracle数据库操作正常,对oracle服务进行查看并重启,并无异常,运行t ...