我是初学者,使用lambda表达式。
我有经销商名单,foreach经销商我必须计算等级。
请求是将等级计算分成单独的方法。
所以我正在编写以下两种方法,但是我无法将参数传递给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表达式并计算成绩?
非常感谢...
答案 0 :(得分:5)
看起来你需要:
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
方法,并将返回值加到TotalPoints
属性中。
或者您可以将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();
答案 1 :(得分:3)
这不能解决您的问题,但它概述了如何将lambdas发送到方法
你会使用Func&amp;将lambdas传递给方法的行动
<强>函数功能强>
可以有1到15个输入参数,并且必须具有输出参数
<强>动作强>
可以有1到16个输入参数,没有输出参数
即,我认为他们如何在EntityFramework中为谓词
执行此操作public static List<People> Filter<TEntity>(this List<People> myList, Func<TEntity, TResult> predicate)
{
return myList.Where(predicate).ToList();
}
然后用法就像
myList.Filter(ml => ml.Age > 18);