我已经开始尝试实现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);
}
我应该如何完成这个方法体?
答案 0 :(得分:4)
在我看来,你正在发明Select。我没有看到你的Map和Select已经做的事情之间的区别。它返回IQueryable&lt; U&gt;基于表达式和初始IQueryable&lt; T&gt;。
对于缩小/折叠等内容,请参阅Queryable.Aggregate功能。
答案 1 :(得分:1)
您正在寻找.Select()
方法