代码之家  ›  专栏  ›  技术社区  ›  Paul Mrozowski

如何传入一个lambda,该lambda将用作数据表中行的筛选器?

  •  3
  • Paul Mrozowski  · 技术社区  · 16 年前

    下面是代码的一部分:

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

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

    但是相反,我想将“Where”部分作为lambda表达式传递,但是我一直在语法中迷失以获得正确的参数。

    我有几种方法来解决这个问题,但实际上并不涉及lambdas,但这似乎是一种很好的处理方法。

    2 回复  |  直到 16 年前
        1
  •  7
  •   Jon Skeet    16 年前

    我有点困惑,因为你 已经 使用lambda表达式指定Where子句,但我怀疑您希望:

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

    然后,你可以用以下方式来称呼它:

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

        2
  •  0
  •   Indeed is Trash    16 年前

    如果要存储lambda表达式,需要这样声明它。 如果整数小于3,则返回true,例如:

    Func<int,bool> F = o=>o < 3
    

    然后你可以把它传给别人。