2009-01-23 33 views
3

我有一些接受DataTable作爲參數的代碼,並計算DataTable中幾個列的總數。我認爲能夠傳遞一個lambda表達式可能會很好,這個lambda表達式可以在我總計的列上執行一個過濾器。如何傳遞將用作數據表中行的過濾器的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")); 

而是我想通過「在哪裏「部分作爲lambda表達式來代替,但我一直迷失在語法中以使參數正確。

我有幾種方法可以解決這個問題,其實並不涉及lambdas,但它似乎是處理這個問題的好方法。

任何想法?

回答

7

我稍微困惑,因爲你已經指定用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"); 

這就是你所追求的嗎?

+0

該代碼與第一個示例類似。第二個例子是我希望它的行爲(而不是實際編寫代碼的方式)。我很親密。我不確定Func想要什麼類型,但現在我明白了,這很明顯。 – 2009-01-23 20:12:25

0

如果你想存儲lambda表達式,你需要像這樣聲明它。

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

然後,你可以圍繞它傳遞: 如果一個整數例如小於3這將返回true。

相關問題