如何将函数应用于IQueryable实例?

时间:2009-02-12 14:15:34

标签: c# linq iqueryable

我已经开始尝试实现IQueryable< T>要使用LINQ进行查询的数据类型。例如,我做了几个这样的函数(这只是一个临时细节,扩展方法不适用于特定的IQueryable实现):

public static IQueryable<T> Pow<T>(this IQueryable<T> values, T pow)
{
    var e = BinaryExpression.Power(values.Expression, ConstantExpression.Constant(pow));

    return values.Provider.CreateQuery<T>(e);
}

然后我认为将一个函数应用于IQueryable对象中的每个元素会很有用,但我无法弄清楚如何构造正确的表达式。方法签名可能如下所示:

public static IQueryable<T> Map<T>(this IQueryable<T> values, Expression<Func<T,T>> map)
{
    Expression e = ...

    return values.Provider.CreateQuery<T>(e);
}

我应该如何完成这个方法体?

2 个答案:

答案 0 :(得分:4)

在我看来,你正在发明Select。我没有看到你的Map和Select已经做的事情之间的区别。它返回IQueryable&lt; U&gt;基于表达式和初始IQueryable&lt; T&gt;。

对于缩小/折叠等内容,请参阅Queryable.Aggregate功能。

答案 1 :(得分:1)

您正在寻找.Select()方法