我有一个包含查询的简单方法来计算一些值.
private decimal MyQueryBuilderMethod(List<ThingsViewModel> myThings)
{
return myThings.Where(x => x.Id == 1)
.Select(x => (x.ThisValue * x.That))
.Sum();
}
Run Code Online (Sandbox Code Playgroud)
我的目的是修改方法,允许我指定在对象中查询的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();
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想传递类似的内容:
MyQueryBuilderMethod(things, x.ThisOtherValue)
Run Code Online (Sandbox Code Playgroud)
以下应该有效:
private decimal MyQueryBuilderMethod(List<ThingsViewModel> myThings,
Func<ThingsViewModel, decimal> thisValue)
{
return myThings.Where(x => x.Id == 1)
.Sum(x => (thisValue(x) * x.That));
}
Run Code Online (Sandbox Code Playgroud)
Select(...).Sum()我也用更短但等效的替换Sum(...)。
然后您可以像下面这样调用它:
var result = MyQueryBuilderMethod(myThings, t => t.ThisValue);
Run Code Online (Sandbox Code Playgroud)