2010-05-02 58 views
3

我有一個數據表。我正在爲此填充一些值。 例如可以使用Lambda表達式填充數據表(C#3.0)

DataTable dt =new DataTable(); 
dt.Columns.Add("Col1",typeof(int)); 
dt.Columns.Add("Col2",typeof(string)); 
dt.Columns.Add("Col3",typeof(DateTime)); 
dt.Columns.Add("Col4",typeof(bool)); 


for(int i=0;i< 10;i++) 
dt.Rows.Add(i,"String" + i.toString(),DateTime.Now,(i%2 == 0)?true:false); 

這個程序沒有什麼錯,給了我預期的輸出。

但是,最近,我正在學習Lambda並已經完成了一些基礎知識。

有了,我試圖做同樣的事情在

Enumerable.Range(0,9).Select(i = > 
{ 

    dt.Rows.Add(i,"String" + i.toString(),DateTime.Now,(i%2 == 0)?true:false); 
}); 

但我不成功。

我的方法是否正確(是的,我知道我正在編譯時錯誤;因爲目前對這個主題的知識還不夠)?

我們可以通過我所做的方式來達到這個目標是一個很大的疑問(正如我不知道......只是給出一個鏡頭)。

如果是這樣,有人可以在這方面幫助我。

我使用C#3.0和DOTNET框架3.5

感謝

回答

2

你非常接近。請刪除{大括號}和「= >」中的空格。

Enumerable.Range(0, 9).Select(i => dt.Rows.Add(i, 
    "String" + i.ToString(), DateTime.Now, (i%2 == 0) ? true : false)); 
+0

使用LINQ做的任何其他方式 – 2010-05-02 19:29:54

2

Select方法返回具有延遲執行的枚舉。要讓枚舉執行,您必須枚舉它。此外 - dt.Rows.Add返回void,所以它是一個Action,而不是一個Func,並且不能在Select調用中使用。

而不是使用選擇,如何使用

ToList<T>().ForEach<T>(Action<T>) 

如在:

Enumerable.Range(0,9) 
    .ToList() 
    .ForEach(i => 
    { 
    dt.Rows.Add(i,"String" + i.ToString(), DateTime.Now, (i%2 == 0)); 
    });