当前位置:  开发笔记 > 编程语言 > 正文

如何传入将用作数据表中行的过滤器的lambda?

如何解决《如何传入将用作数据表中行的过滤器的lambda?》经验,为你挑选了1个好方法。

我有一些代码接受DataTable作为参数,并计算DataTable中几个列的总和.我认为能够传入一个lambda表达式可能会很好,这个表达式会对我总计的列执行过滤.

这是代码的一部分:

public TrafficTotals CalculateTotals(DataTable table)
{
    TrafficTotals total = new TrafficTotals();
    total.TotalTraffic = table.AsEnumerable().Sum(p => p.Field("Converted"));
    // More stuff

我可以直接在代码中手动将过滤器添加到表达式中:

var filteredTotal = table.AsEnumerable().Where(p => p.Field("MyColumn") == "Hello").Sum(p => p.Field("Converted"));

但相反,我想将"Where"部分作为lambda表达式传递,但我不断迷失在语法中以获得正确的参数.

我有几种方法可以解决这个问题,但实际上并没有涉及到lambda,但它似乎是处理这个问题的好方法.

有任何想法吗?



1> Jon Skeet..:

我有点困惑,因为你已经用lambda表达式指定了Where子句,但我怀疑你想要这个:

public TrafficTotals CalculateTotals(DataTable table, 
                                     Func filter)
{
    TrafficTotals total = new TrafficTotals();
    total.TotalTraffic = table.AsEnumerable()
                              .Where(filter)
                              .Sum(p => p.Field("Converted"));
    // More stuff
}

然后你用它来调用它:

totals = CalculateTotals(table, 
                         row => row.Field("MyColumn") == "Hello");

这就是你要追求的吗?

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有