• linq 整理(前序)


    前言

    对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> 查询编译为表达式树。
    
  • 相关阅读:
    每天学习算法二
    每天学习算法 一
    数据量基础
    SQL server数据库创建代码,filegroup文件组修改,
    SQL学习笔记之 数据库基础(一)
    Oracle的查询-条件表达式
    Oracle的查询-单行查询
    Oracle 的查询-scott用户介绍
    Oracle的基本操作-序列的使用
    Oracle的基本操作-修改表结构、数据的增删改查
  • 原文地址:https://www.cnblogs.com/aoximin/p/13727408.html
Copyright © 2020-2023  润新知