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

时间:2014-04-22 10:49:28

标签: c# linq

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

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)

1 个答案:

答案 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);