gpt4 book ai didi

c# - LINQ QueryProvider 选择

转载 作者:太空宇宙 更新时间:2023-11-03 13:52:14 25 4
gpt4 key购买 nike

我正在尝试为选择编写一个简单的 QueryProvider,但一直失败。这是我的示例查询:

var query = from elem in MyIQueryableImplementation
select new {Name = elem.Name};

其后是调用的 foreach 语句:

public IEnumerator<T> GetEnumerator()
{
return ((IEnumerable<T>)this.provider.Execute(this.expression)).GetEnumerator();
}

调用(暂时忽略表达式树):

public override object Execute(Expression expression)
{
return Exec();
}

然后:

public static IEnumerable<object> Exec()
{
for(int i = 0; i < 10; i++)
{
yield return new {Name = "TEST"};
}
yield break;
}

运行它,它抛出异常(在 GetEnumerator() 调用中):

Unable to cast object of type '<Exec>d__0' to type 'System.Collections.Generic.IEnumerable`1[<>f__AnonymousType0`1[System.String]]'.

我该如何解决这个问题?

最佳答案

IEnumerable从 Exec 返回的是 IEnumerable<object> .它恰好返回从对象派生的类型的元素,但它的接口(interface)类型只是 IEnumerable<object> .这就是为什么您不能将其转换为 IEnumerable1[<>f__AnonymousType01[System.String]] 的原因.

不过,您可以按元素转换它:

return ((IEnumerable)this.provider.Execute(this.expression)).Cast<T>().GetEnumerator();

关于c# - LINQ QueryProvider 选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13401655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com