Linq:如何查询集合中的项目,直到总和达到某个值
给出以下对象:
public class Product { string Name {get;} int Quantity {get;} }
使用Linq,如果我得到一个总和>=
给定数量,我将如何查询List
? 换句话说,如果我的列表看起来像
Name Quantity ----------------- prod1 5 prod2 6 prod7 7
我想查询List并拉出实例,直到得到Sum >=8
。 在这种情况下,我将获得列表中的前两项。 如果我想要总和>= 12
,我会得到所有三个。
我知道我可以写一个循环为我做这个,但我想幻想有一些光滑的单行使用Linq来实现同样的事情。
谢谢
这是一个快速2class轮。
var sum = 0; var query = col.Where(x => { var temp = sum; sum += x.Quantity; return temp < 500; });
将500替换为您选择的常量或变量。
编辑
这是mquander更有效的解决方案
var sum = 0; var query = col.TakeWhile(x => { var temp = sum; sum += x.Quantity; return temp < 500; });
您只需创建一个变量来保存总和,然后添加到它,因为列表中的每个项目都使用where
子句进行测试:
int sum = 0; from product in list where (sum += product.Quantity) < 8 select product
- 在调用方法之前处理信息的自定义属性
- 使用不安全代码的C#位图
- entity framework。所有方法链接
- C#错误代码与exception
- 在异步方法中测试exception
- 通过StringBuilder使用XmlWriter进行XML序列化是utf-16而via Stream是utf-8?
- 使用IIS Express但HttpContext.Current.User.Identity.Name为空,但不是Visual Studio Development Server
- 使用jquery.countdown.js + Asp.net调用serverTime时无法获得正确的时间?
- 具有长非ascii名称的电子邮件附件