Fer*_*ndo 2 c# linq aggregate-functions
我有两个看起来几乎相同的方法,除了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)));
// ...
}
Run Code Online (Sandbox Code Playgroud)
这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;
}
}
Run Code Online (Sandbox Code Playgroud)
由于两种方法都做同样的事情,我想只有一种方法,我将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));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
807 次 |
| 最近记录: |