2009-02-12 2 views
1

Я начал немного играть с реализацией типа данных IQueryable <T> с помощью LINQ. Например, я сделал пару таких функций, как это (Это лишь временная деталь, метод расширения не для конкретной реализации IQueryable):Как применить функцию к экземпляру 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. Я не вижу разницы между вашей Картой и тем, что выбрал уже. Он возвращает IQueryable <U> на основе выражения и исходного IQueryable <T>.

Для чего-то вроде Уменьшить/Свернуть, см. Функцию Queryable.Aggregate.

+0

Кажется, что вы правы. Полагаю, я должен просто следовать за несколькими учебниками вместо того, чтобы внедрять случайные вещи;) –

Смежные вопросы