Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用种子翻转Linq骨料_C#_Linq - Fatal编程技术网

C# 用种子翻转Linq骨料

C# 用种子翻转Linq骨料,c#,linq,C#,Linq,我正在寻找与聚合等价的重载,它接受一个种子,但从种子扩展而不是从聚合集合扩展。也就是说,给定一个Func(适合在中使用,其中)集合,我希望将它们依次应用于基本集合。因此,考虑到这种设置: class Product { public int Name { get; set; } public int Size { get; set; } public int Price { get; set; } } var products = new List<Product

我正在寻找与
聚合
等价的重载,它接受一个种子,但从种子扩展而不是从聚合集合扩展。也就是说,给定一个
Func
(适合在
中使用,其中
)集合,我希望将它们依次应用于基本集合。因此,考虑到这种设置:

class Product {
    public int Name { get; set; }
    public int Size { get; set; }
    public int Price { get; set; }
}

var products = new List<Product> {
    new Product { Name = "toaster", Size = 100, Price = 49 },
    new Product { Name = "pencil", Size = 2, Price = 5 },
    new Product { Name = "Oven", Size = 500, Price = 1000 }
}.AsEnumerable();

var conditions = new List<Func<Product, bool>> {
    { o => o.Size > 50 },
    { o => o.Price < 100 }
}.AsEnumerable();
相反,我希望能够使用:

return enumerable.WhereAll(conditions);
这是我必须为之编写自己的扩展方法,还是有一种方法可以通过本机Linq扩展方法实现这一点?我认为在没有真正的聚合发生的情况下,
Aggregate
语法可能会令人困惑(至少,开发人员会如何看待它)。如果我确实使用了
Aggregate
,我认为这在代码中会令人惊讶或困惑,首先是因为没有发生真正的聚合(例如求和或连接),其次是因为当
conditions
为空集合时,它仍然返回种子(对于使用集合和扩展方法来说,这是一个有点不习惯的、令人惊讶的结果,其中返回值不是扩展方法操作的对象的转换)


我愿意使用比
更好的名称,wherell
。我考虑过
转换
映射
,和
应用
,这将返回所有产品
p
,其中所有条件
c
在传递时返回true
p

products.Where(p => conditions.All(c => c(p)));

谢谢@Rahul,我点击了错误的标签建议!Wherell怎么办?
?没有像这样的东西存在,所以你应该自己写。@Daniel是的,当然。我说的是错误的。我一直是说
在哪里
。谢谢。你在找
产品吗。Where(p=>conditions.all(c=>c(p)))
?看起来@dasblinkenlight和我得到了相同的解决方案——如果他们发布答案,我会删除这个。这很好,我学到了一些东西。但我必须更加小心我的问题,因为这实际上是针对一个
IQueryable
。答案太好了,问题错了。叹气。
products.Where(p => conditions.All(c => c(p)));