代码之家  ›  专栏  ›  技术社区  ›  Morten Christiansen

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

  •  1
  • Morten Christiansen  · 技术社区  · 16 年前

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

    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);
    }
    

    然后我认为对IQuery对象中的每个元素应用一个函数是有用的,但我不太清楚如何构造正确的表达式。方法签名可能看起来像这样:

    public static IQueryable<T> Map<T>(this IQueryable<T> values, Expression<Func<T,T>> map)
    {
        Expression e = ...
    
        return values.Provider.CreateQuery<T>(e);
    }
    

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

    2 回复  |  直到 16 年前
        1
  •  4
  •   Craig Stuntz    16 年前

    在我看来,你在发明 Select 。我看不出你的地图和Select已经做的有什么区别。它返回一个IQuery<U>基于表达式和初始IQuery<T>。

    有关Reduce/Fold之类的内容,请参阅 Queryable.Aggregate 功能。

        2
  •  1
  •   Marc Gravell    16 年前

    您正在寻找 .Select() 方法