我怎么能用Func <>来修改lambda的单个条件

Nic*_*ick 5 c# linq

我有一个包含查询的简单方法来计算一些值.

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)

Chr*_*Fin 4

以下应该有效:

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)