首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非泛型AsEnumerable

非泛型AsEnumerable
EN

Stack Overflow用户
提问于 2010-09-27 22:36:28
回答 4查看 1K关注 0票数 2

您建议如何在非通用IQueryable上使用AsEnumerable

在调用AsEnumerable之前,我不能使用Cast<T>OfType<T>方法来获取IQueryable<object>,因为这些方法有它们自己的由底层IQueryProvider显式转换,如果我将它们与非映射实体一起使用,将中断查询转换(显然对象没有映射)。

现在,我有自己的扩展方法(如下所示),但我想知道是否有一种方法内置到框架中。

代码语言:javascript
复制
public static IEnumerable AsEnumerable(this IQueryable queryable)
{
    foreach (var item in queryable)
    {
        yield return item;
    }
}

因此,使用上面的扩展方法,我现在可以这样做:

代码语言:javascript
复制
IQueryable myQuery = // some query...

// this uses the built in AsEnumerable, but breaks the IQueryable's provider because object is not mapped to the underlying datasource (and cannot be)
var result = myQuery.Cast<object>().AsEnumerable().Select(x => ....);

// this works (and uses the extension method defined above), but I'm wondering if there's a way in the framework to accomplish this
var result = myQuery.AsEnumerable().Cast<object>().Select(x => ...);
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-27 22:51:35

既然接口IQueryable继承自IEnumerable,为什么不:

代码语言:javascript
复制
IQueryable queryable;
IEnumerable<T> = (queryable as IEnumerable).Cast<T>();

编辑

有两种Cast<>扩展方法:

代码语言:javascript
复制
public static IQueryable<TResult> Cast<TResult>(this IQueryable source)
public static IEnumerable<TResult> Cast<TResult>(this IEnumerable source)

调用哪一个是由编译器静态决定的。因此,将IQueryable转换为IEnumerable将导致调用第二个扩展方法,其中它将被视为IEnumerable

票数 4
EN

Stack Overflow用户

发布于 2010-09-27 22:48:46

换句话说,JaredPar的答案是:

代码语言:javascript
复制
public static IEnumerable AsEnumerable(this IEnumerable source)
{
    return source;
}

用法:

代码语言:javascript
复制
IQueryable queryable = // ...
IEnumerable enumerable = queryable.AsEnumerable();
IEnumerable<Foo> result = enumerable.Cast<Foo>();
//                                     ↑
//                           Enumerable.Cast<TResult>(this IEnumerable source)
票数 4
EN

Stack Overflow用户

发布于 2010-09-27 22:40:45

类型IQueryable继承自非泛型IEnumerable,因此此扩展方法似乎没有任何作用。为什么不直接将其用作IEnumerable呢?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3804875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档