我有两个看起来几乎一样的方法,除了在 Linq 查询中使用的聚合函数。例如:
public IEnumerable<Item> DoStuff(IEnumerable<Item> someItems) {
var items = someItems.GroupBy(i => i.Date).Select(p => new Item(p.Key, p.Sum(r => r.Value)));
// ...
}
public IEnumerable<Item> DoOtherStuff(IEnumerable<Item> someItems) {
var items = someItems.GroupBy(i => i.Date).Select(p => new Item(p.Key, p.Max(r => r.Value)));
// ...
}
Item
是这样的类:
public class Item {
public DateTime Date { get; private set; }
public decimal Value { get; private set; }
public Item(DateTime date, decimal value) {
Date = date;
Value = value;
}
}
由于这两种方法做同样的事情,我希望只有一种方法可以将 IEnumerable 和聚合函数 (sum/max) 作为参数传递。我怎样才能做到这一点?
最佳答案
尝试以下操作
public IEnumerable<Item> DoStuff(
IEnumerable<Item> someItems,
Func<IGrouping<DateTime,decimal>,Item> reduce) {
var items = someItems.GroupBy(i => i.Date).Select(reduce);
...
}
DoStuff(someItems, p => p.Sum(r => r.Value));
DoStuff(someItems, p => p.Max(r => r.Value));
关于c# - 使用 linq 在聚合函数之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3506768/