Linq 查询仅对高于特定阈值的值求和
Linq Query to sum only values above specific threshold
我很难从列中分离出高于特定阈值的值。我只需要计算超过 100 的英里数并将其乘以一个比率。例如,如果我一行有 101 英里,下一行有 102 英里,另一行有 103 英里,我想要的总和将是 1*myrate + 2*myrate + 3*myrate
private void SetMiles()
{
int.TryParse(MDate.ToString("MM"), out int month);
int.TryParse(MDate.ToString("yyyy"), out int year);
TotalMiles = Decimal.Round(Convert.ToDecimal(MyTable
.Where(a => a.Date <= MDate & a.Date.Month == MDate.Month & (a.Date.Year) == year & a.Miles > 100)
.Select(a => a.Miles).Sum() * myrate), 2, MidpointRounding.AwayFromZero);
}
以上不能正常工作,但这是我的出发点。我怎样才能实现我的目标并使其尽可能简单?
更改您的Select
取差值:
TotalMiles = Decimal.Round(Convert.ToDecimal(MyTable
.Where(a => a.Date <= MDate && a.Date.Month == MDate.Month && (a.Date.Year) == year && a.Miles > 100)
.Select(a => a.Miles - 100).Sum() * myrate), 2, MidpointRounding.AwayFromZero);
另请注意,您需要 &&
作为逻辑 AND 运算符
你可以在你的 class
中制作 属性
public int Value {
get {
if (Miles > 100)
{
return (Miles - 100);
}
else
{
return 0;
}
}
}
然后使用这个
select(a=>a.Value).Sum()*rate;
因为那些不超过 100 的将 return 0 所以它们不会影响你的结果
最终代码将是
TotalMiles = Decimal.Round(Convert.ToDecimal(MyTable
.Where(a => a.Date <= MDate && a.Date.Month == MDate.Month && (a.Date.Year) == year)
.select(a=>a.Value).Sum() * myrate), 2, MidpointRounding.AwayFromZero);
我很难从列中分离出高于特定阈值的值。我只需要计算超过 100 的英里数并将其乘以一个比率。例如,如果我一行有 101 英里,下一行有 102 英里,另一行有 103 英里,我想要的总和将是 1*myrate + 2*myrate + 3*myrate
private void SetMiles()
{
int.TryParse(MDate.ToString("MM"), out int month);
int.TryParse(MDate.ToString("yyyy"), out int year);
TotalMiles = Decimal.Round(Convert.ToDecimal(MyTable
.Where(a => a.Date <= MDate & a.Date.Month == MDate.Month & (a.Date.Year) == year & a.Miles > 100)
.Select(a => a.Miles).Sum() * myrate), 2, MidpointRounding.AwayFromZero);
}
以上不能正常工作,但这是我的出发点。我怎样才能实现我的目标并使其尽可能简单?
更改您的Select
取差值:
TotalMiles = Decimal.Round(Convert.ToDecimal(MyTable
.Where(a => a.Date <= MDate && a.Date.Month == MDate.Month && (a.Date.Year) == year && a.Miles > 100)
.Select(a => a.Miles - 100).Sum() * myrate), 2, MidpointRounding.AwayFromZero);
另请注意,您需要 &&
作为逻辑 AND 运算符
你可以在你的 class
中制作 属性public int Value {
get {
if (Miles > 100)
{
return (Miles - 100);
}
else
{
return 0;
}
}
}
然后使用这个
select(a=>a.Value).Sum()*rate;
因为那些不超过 100 的将 return 0 所以它们不会影响你的结果 最终代码将是
TotalMiles = Decimal.Round(Convert.ToDecimal(MyTable
.Where(a => a.Date <= MDate && a.Date.Month == MDate.Month && (a.Date.Year) == year)
.select(a=>a.Value).Sum() * myrate), 2, MidpointRounding.AwayFromZero);