Как применить функцию к экземпляру IQueryable? - PullRequest
1 голос
/ 12 февраля 2009

Я начал немного играть с реализацией типа данных IQueryable для запроса с использованием 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 ]

4 голосов
/ 12 февраля 2009

Мне кажется, что вы изобретаете Выберите . Я не вижу разницы между вашей картой и тем, что уже делает Select. Он возвращает IQueryable на основе выражения и начального IQueryable .

Что-то вроде уменьшения / сгиба см. В функции Queryable.Aggregate .

1 голос
/ 12 февраля 2009

Вы ищете .Select() метод

...