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);