C# 实现IQueryable.Count

C# 实现IQueryable.Count,c#,linq,iqueryable,C#,Linq,Iqueryable,我在一家IQueryable供应商工作。在IQueryProvider中,我有以下代码: public TResult Execute<TResult>(Expression expression) { var query = GetQueryText(expression); // Call the Web service and get the results. var items = myWebService.Select<TResult>

我在一家IQueryable供应商工作。在IQueryProvider中,我有以下代码:

public TResult Execute<TResult>(Expression expression)
{
    var query = GetQueryText(expression);

    // Call the Web service and get the results.
    var items = myWebService.Select<TResult>(query);

    IQueryable<TResult> queryableItems = items.AsQueryable<TResult>();
    return (TResult)queryableItems;
}
但我不能让我的头周围,我把这个在IQueryable或IQueryProvider


我基本上是从阅读教程和开源示例开始工作的,但似乎找不到一个真正有用的工具。

这里有一系列关于IQueryable的实现的文章(当然相当复杂),IQueryable确实有用()。计数本身在“第X部分-分组依据和聚合”中


答案似乎比我最初想象的要简单。帮助:

Execute方法是提供程序的入口点,用于实际执行查询表达式。有一个显式的execute而不是仅仅依赖IEnumerable.GetEnumerator()是很重要的,因为它允许执行不一定产生序列的表达式。例如,查询“myquery.Count()”返回一个整数。此查询的表达式树是对返回整数的Count方法的方法调用。Count方法(以及其他聚合等)使用此方法“立即”执行查询

我对myContext进行了一些调试和查询,其中(x=>x.var1>5)Execute被调用,
TResult
是一个
IEnumerable

对于
myContext.Where(x=>x.var1>5).Count()
Execute被调用,
TResult
是一个
int


所以我的Execute方法只需要适当地返回

嗯,它是从伦敦回来的。你的问题到底是什么?我正在写一个提供者,但我真的不知道我在做什么!我真的在寻找例子……我很惊讶如果你真的不知道自己在做什么,你可以实现
Where
OrderBy
,和
Take
Count
与其他类似,因此我对您的困惑感到困惑。我想这是因为myWebService.Select总是返回一个列表(这对于where、orderby和Take很好),而myWebService.Count返回一个int。我想我需要更多地了解基本原理!相比之下,我过得很轻松!web服务不支持任何分组或复杂的子选择,因此我的查询字符串不会比“where var1>
10
和var2=
5
order var2”复杂得多
int count = myWebService.Count(query);