在Linq中传递参数

时间:2016-12-16 03:59:06

标签: c# linq c#-4.0

我在方法中有以下代码:

someData = table.AsEnumerable()
    .Where(row => row.someRow.Equals("Something"))
    .Sum(row => row.AnotherRow);

在最后一行,我想从其他地方传入一个参数来替换.AnotherRow

换句话说,比如:

.Sum(row => row. + myParameter);

有什么想法吗?我在尝试上述操作时遇到错误。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

您无法传递代表.AnotherRow的内容,但您可以传递一个从您的对象中选择所需属性的仿函数。

我们说tableIEnumerable<MyClass>。然后你可以这样做:

int SumSelected(Func<MyClass,int> attrSelector) {
    return table.AsEnumerable()
        .Where(row => row.someRow.Equals("Something"))
        .Sum(row => attrSelector(AnotherRow));
}

现在您可以使用&#34;选择器调用此方法&#34;指定要添加的属性,如下所示:

var totalCustomers = SumSelected(obj => obj.CustomerCount);
var totalStores = SumSelected(obj => obj.StoreCount);

答案 1 :(得分:0)

我想:

someData = table.AsEnumerable()
    .Where(row => row.someRow.Equals("Something"))
g.Sum(row => Calculate(row => row.AnotherRow, row1 =>row1.AnotherRow));

方法计算:

 private double Calculate(double d1, double d2)
    {
        return d1 + d2;
    }