我有一个包含查询的简单方法来计算某些值。
private decimal MyQueryBuilderMethod(List<ThingsViewModel> myThings)
{
return myThings.Where(x => x.Id == 1)
.Select(x => (x.ThisValue * x.That))
.Sum();
}
我的目标是修改方法,允许我指定在对象中查询的x.ThisValue字段。
如果我要指定查询的Where子句,我可能会传递一个谓词,但在这种情况下,我只想改变x.ThisValue的值。
private decimal MyQueryBuilderMethod(List<ThingsViewModel> myThings, Func<ThingsViewModel,bool> predicates)
{
return myThings.Where(predicates)
.Select(x => (x.ThisValue * x.That))
.Sum();
}
理想情况下,我想传递类似的内容:
MyQueryBuilderMethod(things, x.ThisOtherValue)
答案 0 :(得分:4)
以下应该工作:
private decimal MyQueryBuilderMethod(List<ThingsViewModel> myThings,
Func<ThingsViewModel, decimal> thisValue)
{
return myThings.Where(x => x.Id == 1)
.Sum(x => (thisValue(x) * x.That));
}
我还将Select(...).Sum()
替换为较短但等效的Sum(...)
。
然后您可以像下面这样调用它:
var result = MyQueryBuilderMethod(myThings, t => t.ThisValue);