【发布时间】:2015-12-15 15:56:35
【问题描述】:
我有一个基于某个 ID 或字符串值的列表,我想通过分组更改计算类型
var result = from r in mlist
group r by new
{
r.ParameterId,
r.WId,
} into g
select new
{
g.Key.ParameterId,
g.Key.WId,
Value = g.Sum(x => x.Value)
};
我想将这个 linq Sum 替换为自定义方法,该方法将返回基于某种计算类型(如 avg、sum 等)的计算结果。
可能是这样的:
var result = from r in mlist
group r by new
{
r.ParameterId,
r.WId,
} into g
select new
{
g.Key.ParameterId,
g.Key.WId,
Value = g.CustomMethod(x => x.Value, x.calctype)
};
【问题讨论】:
-
这会撞到数据库吗?还是在记忆中?无论如何,这就像在您的自定义方法中编写
if/switch语句一样简单。 -
g.CustomMethod(x => x.Value, x.calctype)中的第二个x来自哪里?也许可以在字典中添加所有可能的函数,以calctype作为键。在这种情况下,您可以将其称为dict[<calctype>](g, x => x.Value)。使用它你不能像扩展方法一样调用它。 -
是否需要专门将x.value和x.calctype传递给CustomMethod?如果您可以访问 CustomMethod 中的完整 r 对象,它不会起作用吗?
-
Rob:它在内存中 - 我不能像我提到的那样调用 custommethod 请建议更好的方法来调用方法。