0

是否可以向 IQueryable 添加扩展方法,将其转换为另一种类型的 IQueryable?

我正在寻找这样的东西;

IQueryable<foo> source;
IQueryable<bar> result = source.Convert<bar>();

我有这个,显然它不起作用。哈哈

public static IQueryable<T1> Convert<T2>(this IQueryable<T1> source) where T1 : class
{
    // Do some stuff
}

提前致谢。

4

2 回答 2

6

当然它已经存在了Select——你只需要提供转换。例如,通过获取长度来转换IQueryable<string>为:IQueryable<int>

IQueryable<string> source = ...;
IQueryable<int> lengths = source.Select(x => x.Length);
于 2013-03-03T19:30:17.330 回答
1

您返回的类型 ( IQueryable<T1>) 与原始可查询对象中的类型 ( ) 相同,因此您的扩展方法采用 anIQueryable<foo>并返回 an IQueryable<foo>,您想要在其中返回 an IQueryable<bar>。此外,您将 T2 定义为泛型类型参数,而不是 T1。你可以改成这样:

public static IQueryable<T2> Convert<T1, T2>(IQueryable<T1> source) where T1 : class
{
...
}

然后像这样调用:

IQueryable<Bar> result = source.Convert<Foo, Bar>();

但是.. 正如 Jon 指出的那样,这可以在 Select 中完成。如果和之间的转换foo不是bar那么微不足道,或者您想重新使用它,您可以定义该映射,而不是将 IQueryable 转换为 IQueryable。

于 2013-03-03T19:52:15.910 回答