在IQueryProvider的实现中构造Linq.EnumerableQuery时编译器错误

时间:2012-11-28 16:38:29

标签: c# linq generics compiler-errors iqueryprovider

我有一个IQueryProvider的实现,并有以下方法:

public override IQueryable<T> CreateQuery<T>(System.Linq.Expressions.Expression expression)
    {
        return new System.Linq.EnumerableQuery<T>(this.Items);
    }

items属性定义为

public IEnumerable<T> Items { get; set; }

我为EnumerableQuery构造函数收到了一个神秘的编译器错误:

> Argument 1: cannot convert from
> 'System.Collections.Generic.IEnumerable<T>
> [c:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll]' to
> 'System.Collections.Generic.IEnumerable<T>> [c:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll]'

我做错了什么?我知道它可能会被包含在某个地方的泛型中,但这些论点看起来和我一样!

1 个答案:

答案 0 :(得分:2)

问题是你的方法声明:

public override IQueryable<T> CreateQuery<T>(Expression expression)

您在通用方法中声明了 new 类型参数T。这与类型的类型参数不同T。将其更改为非通用方法:

public override IQueryable<T> CreateQuery(Expression expression)

(另外,如果使用适当的using指令,代码将更容易使用,以避免在代码中包含如此多的完全限定类型名称。)