2013-09-24 60 views
1

我有一個表格的數據集。我想將這個表格轉換成Linq的列表。要Linq列出的數據集

此代碼工作正常:

var list = dsUniqueIds.Tables[0].AsEnumerable() 
         .Select(r => new { column1 = r.Field<string>("UniqueIDs") }).ToList(); 

但是,當我試圖改變這樣的列表中投:

List<string> list = dsUniqueIds.Tables[0].AsEnumerable() 
           .Select(r => new { column1 = r.Field<string>("UniqueIDs") }) 
           .ToList(); 

我收到以下錯誤:

Cannot implicitly convert type 
'System.Collections.Generic.List<AnonymousType#1>' to 
'System.Collections.Generic.List<string> 

我需要使用jQuery的文本框自動完成列表中的這些數據。 要獲取數據到jQuery我使用JavaScriptSerializer和序列化(列表)。 序列化(列表)不適用於var。如果我使用var,我只能在JavaScript中獲取對象。 這工作正常,如果我用foreach填充列表。但是我想和Linq一起嘗試,我不知道爲什麼它不起作用。

任何人都知道爲什麼這不起作用?

+3

因爲您未選擇字符串 – wudzik

+2

您linq查詢返回具有屬性column1的對象列表。這不是列表 MichaC

回答

6
r => new { column1 = r.Field<string>("UniqueIDs") } 

這將創建一個名爲column1的屬性的新匿名類型。

嘗試將其更改爲。

r => r.Field<string>("UniqueIDs") 
1

new { column1 = r.Field<string>("UniqueIDs") }正在創建一個具有單個屬性column1的匿名類型。

您有List<SomeAnonymousType>無法將其轉換爲List<string>。這就是編譯器拋出編譯時錯誤的原因。

試試這個

List<string> list = dsUniqueIds.Tables[0] 
           .AsEnumerable() 
           .Select(r => r.Field<string>("UniqueIDs")) 
           .ToList(); 

看看Anonymous types獲取更多信息。

1

,如果你寫

List<string> list = dsUniqueIds.Tables[0].AsEnumerable().Select(r=> r.Field<string>("UniqueIDs") }).ToList(); 

您的代碼不工作,它會工作,因爲AnonymouseType!=字符串

2

如果你想有一個List<string>,你應該選擇string S,不是一個對象匿名類型。

List<string> list = dsUniqueIds.Tables[0].AsEnumerable().Select(r => r.Field<string>("UniqueIDs")).ToList();