前言

对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. jQuery提供的Ajax方法

    jQuery提供了4个ajax方法:$.get()  $.post()  $.ajax()  $.getJSON() 1.$.get() $.get(var1,var2,var3,var4): 参数1 ...

  2. 在Nginx里指定ip_hash的方式解决Tomcat集群session的问题

    据称,Tomcat集群session同步方案有以下几种方式: 1)使用tomcat自带的cluster方式,多个tomcat间自动实时复制session信息,配置起来很简单.但这个方案的效率比较低,在 ...

  3. Python实现加密的RAR文件解压(密码已知)

    博主之前在网上找了很多资料,发现rarfile库不能直接调用,需要安装unrar模块,下面将详细介绍整个实现流程. 第一步:安装unrar模块,直接pip install unrar可能会找不到库,需 ...

  4. JavaScript五中迭代方法小解

    ECMAScript 为数组定义了五个迭代方法.每个方法都接收两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象——影响this的值.传入这些方法中的函数会接收三个参数:数组项的值.该 ...

  5. pytorch常用函数总结(持续更新)

    pytorch常用函数总结(持续更新) torch.max(input,dim) 求取指定维度上的最大值,,返回输入张量给定维度上每行的最大值,并同时返回每个最大值的位置索引.比如: demo.sha ...

  6. 吴恩达《深度学习》-第五门课 序列模型(Sequence Models)-第二周 自然语言处理与词嵌入(Natural Language Processing and Word Embeddings)-课程笔记

    第二周 自然语言处理与词嵌入(Natural Language Processing and Word Embeddings) 2.1 词汇表征(Word Representation) 词汇表示,目 ...

  7. TDengine常见问题解答(FAQ)

    1. TDengine2.0之前的版本升级到2.0及以上的版本应该注意什么?☆☆☆ 2.0版本在之前版本的基础上,进行了完全的重构,配置文件和数据文件是不兼容的.在升级之前务必进行如下操作: 删除配置 ...

  8. 学习 | jQuery移动端页面组件化开发(一)

    最近在学习移动端组件化开发web页面,其中有好多小细节,值的去思考. 主要介绍JS的思路,具体的代码就不贴了,主要是想表达出一种思路 总体来说 1.入口文件,在入口文件中导入插件,插件样式,jquer ...

  9. java.lang.NoSuchMethodError: org.springframework.util.Assert.isTrue(ZLjava/util/function/Supplier;)V

    spring-data-redis 2的版本只支持spring5和spring boot2+,建议降低spring-data-redis版本 <!-- redis --> <depe ...

  10. 1.5Hadoop的启动