c# - 如何在 C# 中将 lambda 表达式作为参数传递

标签 c# linq

我是 lambda 表达式的初学者。

我有一个经销商列表,我必须为每个经销商计算等级。

请求是将成绩计算分离到一个单独的方法中。

所以我正在编写以下两个方法,但是我无法将参数传递给 CalculateGrade() 方法,

public IEnumerable<Dealers> GetDealerGrades(IEnumerable<Dealers> gradeData)
{
    return gradeData
        .GroupBy(row => new { row.Name })
        .Select(g => new Dealers
        {
            Name = g.Key.Name,
            TotalPoints = CalculateGrade(x => Convert.ToDouble(x.RecievedPoints),
                                         y => y.MaxPoints,
                                         z => Convert.ToDouble(z.Weightage)) 
        })
        .ToList();
}

private double CalculateGrade(double d1, int d2, double d3)
{
    return ( d1 / d2 ) 
        * d3 == 0.00 ? 1
        : d3;
}

有人可以建议如何在此传递参数,或者如何传递 lamda 表达式并计算成绩吗?

提前致谢...

最佳答案

看起来你需要那个:

return gradeData
    .GroupBy(row => row.Name)
    .Select(g => new Dealers
    {
        Name = g.Key.Name,
        TotalPoints = g.Sum(x => CalculateGrade(Convert.ToDouble(x.RecievedPoints),
                                                x.MaxPoints,
                                                Convert.ToDouble(x.Weightage)))
    })
    .ToList();

它将调用CalculateGrade group 中每个元素的方法,并将返回值求和到 TotalPoints属性(property)。

或者您可以更改您的 CalculateGrade采取IEnumerabale<Dealers> :

private double CalculateGrade(IEnumerable<Dealers> dealers)
{
    // calculations here
    return dealers.Sum(x => CalculateGrade(Convert.ToDouble(x.RecievedPoints),
                                            x.MaxPoints,
                                            Convert.ToDouble(x.Weightage)))
}

并在您的查询中使用它:

return gradeData
    .GroupBy(row => row.Name)
    .Select(g => new Dealers
    {
        Name = g.Key.Name,
        TotalPoints = CalculateGrade(g)
    })
    .ToList();

关于c# - 如何在 C# 中将 lambda 表达式作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18761080/

相关文章:

c# - 在强类型 View 中显示来自多个表的数据

c# - 有条件地获取 Parent 和 Child 对象

c# - 在 C# 中的 List<List<T>> 的 DataGridView 中显示 HeatMap

c# - EF 5 代码迁移错误 : "There is already an object named _____ in the database"

c# - 解析字符串 - 有比检查每一行更有效的方法吗?

c# - 将数据表导出到 Excel

C# 如何使用 String 获取引用类型行为?

具有动态表名的 C# 查询

c# - 使用 Linq 按日期获取数据

c# - 合并日期范围 Linq to SQL