c# – 如何传入将用作数据表中某行的过滤器的lambda?
发布时间:2020-12-16 01:29:43 所属栏目:百科 来源:网络整理
导读:我有一些代码接受DataTable作为参数,并计算DataTable中几个列的总和.我认为能够传入一个lambda表达式可能会很好,这个表达式会对我总计的列执行过滤. 这是代码的一部分: public TrafficTotals CalculateTotals(DataTable table){ TrafficTotals total = new
我有一些代码接受DataTable作为参数,并计算DataTable中几个列的总和.我认为能够传入一个lambda表达式可能会很好,这个表达式会对我总计的列执行过滤.
这是代码的一部分: 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表达式传递,但我不断迷失在语法中以获得正确的参数. 我有几种方法可以解决这个问题,但实际上并没有涉及到lambda,但它似乎是处理这个问题的好方法. 有任何想法吗? 解决方法
我有点困惑,因为你已经用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"); 这就是你要追求的吗? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |