Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 不';t IQueryable.Expression=表达式常数(this);导致无限循环?_Linq - Fatal编程技术网

Linq 不';t IQueryable.Expression=表达式常数(this);导致无限循环?

Linq 不';t IQueryable.Expression=表达式常数(this);导致无限循环?,linq,Linq,表达式树表示树状数据结构中的代码,其中每个节点都是一个表达式。在Linq中,Linq提供者使用它们将它们转换为目标进程的本机语言 我对表达式树知之甚少,但我一直在阅读下面的代码,作者使用expression.Constant(this)来描述初始查询。因此,根据作者Expression.Constant(this)应该使提供者能够检索someQuery的初始元素序列 但据我所知,这应该会导致一个无限循环,因为someQuery.expression中的表达式树描述的是someQuery对象,而不

表达式树表示树状数据结构中的代码,其中每个节点都是一个表达式。在Linq中,Linq提供者使用它们将它们转换为目标进程的本机语言

我对表达式树知之甚少,但我一直在阅读下面的代码,作者使用
expression.Constant(this)
来描述初始查询。因此,根据作者
Expression.Constant(this)
应该使提供者能够检索
someQuery
的初始元素序列

但据我所知,这应该会导致一个无限循环,因为
someQuery.expression
中的表达式树描述的是
someQuery
对象,而不是查询本身的细节(或者换句话说,如果目标平台是SQL DB,
expression.Constant(这)
没有用非sql术语描述查询应从数据库中检索哪些行或表)。因此,当提供者查看
someQuery.Expression
时,它只会找到
someQuery
对象的描述D。如果它进一步检查D.Expression属性的详细信息,它会再次找到
someQuery
对象的描述,依此类推–因此无限循环:

    public class Query<T> : IQueryable<T>...
    {
        QueryProvider provider;
        Expression expression;

        public Query(QueryProvider provider) {
            this.provider = provider;
            this.expression = Expression.Constant(this);
        }
                     ...
    }

Query<string> someQuery = new Query<string>();
公共类查询:IQueryable。。。
{
查询提供者;
表达;
公共查询(QueryProvider提供程序){
this.provider=提供者;
this.expression=表达式常数(this);
}
...
}
Query someQuery=newquery();

谢谢

我希望提供者了解查询类型,并且知道当它碰到类型为
query
的常量表达式时,它实际上碰到了一片叶子。迟早,提供者必须得到描述“整个表”的内容或等效内容。当然,
查询
需要关于哪个表等的信息,但在一个完整的示例中,我希望它能提供这些信息


(出于兴趣,我是问题的作者吗?我在C#Depth中写了一些非常类似的东西…

不,是从下面的链接。我还没有读完整篇文章,但我认为Query没有任何关于表数据应该来自哪个方面的信息—您能检查一下并报告吗;)。出于好奇,您的书中的查询示例是否有描述“整个表”的“某物”?@user702769:在这种情况下,您可以将
本身作为查询提供程序-
查询
仍然有对提供程序的引用,因此它可以通过这种方式返回到根目录。我不记得我的C#Depth小样本做了什么……但底线是,该查询应该有一些关于它应该检索的表和行的信息——也许是以属性的形式?!不管怎么说,我提供的链接中的代码没有类似的内容,所以我觉得我仍然缺少一些非常明显的东西?!2-“您可以将表本身设置为QueryProvider-查询仍然有对提供程序的引用,因此它可以通过这种方式返回到根目录。”抱歉,这超出了我的理解范围。查询是否已表示数据库中的表?你是说除了查询之外,我们还可以有一个表对象,它将描述DB表(以及该表中的特定行),并且也是一个提供者?我是说
查询
有一个对创建它的提供者的引用-该提供者可以拥有所需的所有信息。