gpt4 book ai didi

c# - 非泛型 AsEnumerable

转载 作者:行者123 更新时间:2023-11-30 19:00:18 24 4
gpt4 key购买 nike

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

我无法使用 Cast<T>OfType<T>获得 IQueryable<object> 的方法打电话前 AsEnumerable ,因为这些方法有自己的底层 IQueryProvider 的显式翻译如果我将它们与非映射实体一起使用(显然对象未映射),将会破坏查询翻译。

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

public static IEnumerable AsEnumerable(this IQueryable queryable)
{
foreach (var item in queryable)
{
yield return item;
}
}

因此,使用上述扩展方法,我现在可以:

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 => ...);

最佳答案

自接口(interface)IQueryable继承自 IEnumerable为什么不:

IQueryable queryable;
IEnumerable<T> = (queryable as IEnumerable).Cast<T>();

编辑
有两个Cast<>扩展方法:

public static IQueryable<TResult> Cast<TResult>(this IQueryable source)
public static IEnumerable<TResult> Cast<TResult>(this IEnumerable source)

调用哪一个是由编译器静态决定的。所以类型转换一个IQueryable作为IEnumerable将导致调用第二个扩展方法,它将被视为 IEnumerable .

关于c# - 非泛型 AsEnumerable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3804875/

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