2013-07-30 43 views
0

不能完全擺動這個copyToDataTable方法。我使用Linq to Sql從數據庫中獲取數據,但是我手動創建了我的表結構,而不是使用DBML文件,因爲我發現這是手動在DataContexts之間切換的最簡單方法。C#Linq CopyToDataTable基於Linq To Sql表類結構

我現在得到的是以下錯誤:

Cannot implicitly convert type 'System.Collections.Generic.IEnumerable' to 'System.Collections.Generic.IEnumerable'. An explicit conversion exists (are you missing a cast?)

我在做什麼是這樣的:

[TABLE(Name = "TableA")] 
class TableA 
{ 
    [Column] public string Name; 
    [Column] public string surName; 
    [Column] public string concatName; 
    [Column] public int ID; 
} 

Table<TableA> TableA = definedDataContext.GetTable<TableA>(); 


IEnumerable<DataRow> que = 
        from res in TableA.AsEnumarable() 
        WHERE someListFromParameters.Contains(res.Name) 
        select res; 

Datatable result = que.CopyToDataTable(); 

誤差線顯示了WHERE關鍵字下的,所以剛AsEnumarable()後聲明。

那麼,我必須根據TableA類創建DataRow嗎?

+0

'AsEnumarable'不是函數,'WHERE'不是'Where'。向我們展示實際的代碼。 –

+0

@ ta.speot.is,我扼殺在哪裏只是爲了說明這一點。這是實際的代碼,替換了表格和列名稱。 – vwdewaal

回答

0

發生該錯誤是因爲您試圖隱式將IEnumerable<TableA>轉換爲IEnumerable<DataRow>

您需要做的是創建一個新的DataTable並向其中添加行(DataRow不能在沒有DataTable的情況下存在)。

下面是一個例子(未經測試,但你的想法):

var name = new DataColumn(); 
name.DataType = typeof(string); 
name.ColumnName = "Name"; 

var surName = new DataColumn(); 
surName.DataType = typeof(string); 
surName.ColumnName = "surName"; 

var concatName = new DataColumn(); 
concatName.DataType = typeof(string); 
concatName.ColumnName = "concatName"; 

var id = new DataColumn(); 
id.DataType = typeof(int); 
id.ColumnName = "ID"; 

var table = new DataTable("TableA"); 
table.Columns.Add(name); 
table.Columns.Add(surName); 
table.Columns.Add(concatName); 
table.Columns.Add(id); 

foreach(var res in TableA.AsEnumerable()) 
{ 
    var row = table.NewRow(); 
    row["name"] = res.Name; 
    row["surName"] = res.surName; 
    row["concatName"] = res.concatName; 
    row["ID"] = res.ID; 
    table.Rows.Add(row); 
} 

最後要說明的,請看看你的變量/屬性名稱,以使它們保持一致。

+0

謝謝安德烈亞斯。這就是我目前正在做的事情(代碼未顯示 - 但解決方案有效),我希望避免這樣做,因爲它感覺像工作中的重複(定義鏈接的表結構併爲查詢重做它)。 – vwdewaal