如何使用lambda表达式创建扩展方法

7 c# lambda

目前我正在创建一个接受参数的扩展方法.使用下面的示例,如何使用lambda表达式转换它?

public static decimal ChangePercentage(this IEnumerable<Trade> trades, DateTime startDate, DateTime endDate)
{
    var query = from trade in trades
                where trade.TradeTime >= startDate
                where trade.TradeTime <= endDate
                orderby trade.TradeTime descending
                select trade;
    return (query.First().Value - query.Last().Value) / query.First().Value * 100;
}
Run Code Online (Sandbox Code Playgroud)

使用lambda vs normal方法参数的优缺点是什么?

谢谢

Jar*_*Par 8

更改样本以使用lambda表达式的一种方法是使用过滤器.

public static decimal ChangePercentage(this IEnumerable<Trade> trades, 
                                       Func<Trade,bool> pred)
        {
            var query = from trade in trades
                        where pred(trade);
                        orderby trade.TradeTime descending
                        select trade;
            return (query.First().Value - query.Last().Value) / query.First().Value * 100;
        }

    someTrades.ChangePercentage(x => x.TradeDate >= startDate && x.TradeTime <= endDate);
Run Code Online (Sandbox Code Playgroud)

这给你的最大专业是灵活性.而不是使用基于日期过滤进行计算的方法.您有一种方法,使用灵活的过滤方法来计算百分比.


Tim*_*son 5

你想用一个lambda表达式替换startDateendDate参数吗?

public static decimal ChangePercentage(this IEnumerable<Trade> trades, DateTime startDate, DateTime endDate)
{
    return trades.ChangePercentage(trade => trade.TradeTime >= startDate 
        && trade.TradeTime <= endDate);
}

public static decimal ChangePercentage(this IEnumerable<Trade> trades, Func<Trade, bool> filter)
    {
        var query = from trade in trades
                    where filter(trade)
                    orderby trade.TradeTime descending
                    select trade;
        return (query.First().Value - query.Last().Value) / query.First().Value * 100;
    }
Run Code Online (Sandbox Code Playgroud)