好吧,我觉得标题听起来很奇怪,但这是我的情景。我认为这是一个简单的查询,但很难在纸上解释。我自己也遇到了LINQ问题。最好通过例子来解释:
我有一个对象列表(在psuedocode中),如下所示:
var data = [
{
quantity: 123,
rate: 0.12
},
{
quantity: 456,
rate: 0.13
},
{
quantity: 3,
rate: 0.14
},
{
quantity: 92,
rate: 0.15
}
]
我正在尝试生成 LINQ 查询,该查询返回rate
等于输入数量的总和。
通过示例解释:
使用上面的示例数据,我想找到匹配总数rate
的{{1}}(来自其他地方的变量输入)。我列表中的前三个对象的数量总共为582,所以我希望我的LINQ查询返回581
(0.14
匹配总rate
个字段大于我输入的条件数量)。
我应该可以使用LINQ来做到这一点,对吧?它有点quantity
和.Sum
,这就是我感到困惑的地方。
是否有任何参考可以解决这种情况? 有没有人有写“条件总和”的经验?
答案 0 :(得分:4)
在函数式编程中,这将是reduce
的变体。在LINQ中,Aggregate
方法可用于此目的。伪LINQ:
var limit = 581;
var rate = data.Aggregate((acc, cur) =>
{
if (acc.quantity < limit)
{
return new
{
quantity = acc.quantity + cur.quantity,
rate = cur.rate
};
}
else
{
return acc;
}
}).rate;
编辑:更紧凑的单行版本:
var rate = data.Aggregate((acc,cur) => acc.quantity < limit ? new { quantity = acc.quantity + cur.quantity, rate = cur.rate } : acc).rate;
答案 1 :(得分:1)
前往Aggregate
但未能排成一行:(
对于所需的单行,这是LINQ
的有趣用法:)
var target = 581;
var sum = 0;
var rate = data.First(i =>(sum += i.Quantity) > target).Rate; // 0.14