2013-07-30 4 views
0

не может полностью размахивать этим методом copyToDataTable. Я использую Linq для Sql для получения моих данных из базы данных, но я создаю свои структуры таблиц вручную и не использую DBML-файлы, поскольку я нашел, что это самый простой способ переключения между DataContext вручную.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() заявление.

Итак, мне нужно создать DataRow, основанный на классе TableA?

+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