Linq:如何查询集合中的项目,直到总和达到某个值

jle*_*bke 13 c# linq

给出以下对象:

public class Product {
   string Name {get;} 
   int Quantity {get;}
}
Run Code Online (Sandbox Code Playgroud)

使用Linq,在获得给定数量List<Product>的总和之前,我将如何查询>=?换句话说,如果我的列表看起来像

Name     Quantity
-----------------
prod1       5
prod2       6
prod7       7
Run Code Online (Sandbox Code Playgroud)

我想查询List并拉出实例,直到得到Sum >=8.在这种情况下,我将获得列表中的前两项.如果我想要总和>= 12,我会得到这三个.

我知道我可以写一个循环为我做这个,但我幻想有一些光滑的单行使用Linq来实现同样的事情.

谢谢

Jar*_*Par 20

这是一个快速2班轮.

var sum = 0;
var query = col.Where(x => { var temp = sum; sum += x.Quantity; return temp < 500; });
Run Code Online (Sandbox Code Playgroud)

将500替换为您选择的常量或变量.

编辑

这是mquander更有效的解决方案

var sum = 0;
var query = col.TakeWhile(x => { var temp = sum; sum += x.Quantity; return temp < 500; });
Run Code Online (Sandbox Code Playgroud)

  • 除了代替.Where(),使用.TakeWhile(),并检查开始时的总和是否大于500,而不是最后(否则你将采取一个)更高效元素太少了.)然后当500障碍被打破时,迭代将停止. (9认同)