Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > LINQ (Language-Integrated Query) > Linq-запрос to DataTable


Автор: VSyntoT 22.5.2008, 17:31
В общем имеется следующий запрос:
var q1 =
from c in db.Customers
where c.CustomerID == "A%"
select new
{
c.CustomerID,
c.CompanyName
};
Хочется сохранить q1 в DataTable, но не знаю как... уже много че перепрообовал, но чет туплю...
Буду очень благодарен за помошь... 

Автор: PashaPash 22.5.2008, 19:26
VSyntoT, полключи System.Data.DataSetExtensions, сделай using System.Data и вызови q1.CopyToDataTable(...).

Автор: VSyntoT 23.5.2008, 11:28
Цитата(PashaPash @  22.5.2008,  19:26 Найти цитируемый пост)
сделай using System.Data и вызови q1.CopyToDataTable(...). 


не совсем понятно...
можно кодом?

Автор: Idsa 9.6.2008, 22:21
Цитата(PashaPash @  22.5.2008,  19:26 Найти цитируемый пост)
VSyntoT, полключи System.Data.DataSetExtensions, сделай using System.Data и вызови q1.CopyToDataTable(...). 

Судя по определению Extension-метода CopyToDataTable:
Код

public static DataTable CopyToDataTable<T>(
    this IEnumerable<T> source
) where T : DataRow

, такой подход сработает только для набора элементов типа DataRow.

Цитата(VSyntoT @  22.5.2008,  17:31 Найти цитируемый пост)
Хочется сохранить q1 в DataTable, но не знаю как

Не знаю, как красиво это сделать. Если бы у DataTable.Rows был метод AddRange, можно было бы что-нибудь придумать, а так, пожалуй, проще пройтись foreach и вручную добавить строки.

Автор: PashaPash 10.6.2008, 09:13
Цитата(Idsa @  9.6.2008,  22:21 Найти цитируемый пост)
Судя по определению Extension-метода CopyToDataTable...

Если работа началась с запроса к DataTable, то вполне можно аккуратно получить в результате набор DataRow.

Автор: Idsa 10.6.2008, 10:14
Цитата(PashaPash @  10.6.2008,  09:13 Найти цитируемый пост)
Если работа началась с запроса к DataTable, то вполне можно аккуратно получить в результате набор DataRow. 

Но ведь мы решаем конкретную проблему:
Цитата(VSyntoT @  22.5.2008,  17:31 Найти цитируемый пост)

var q1 =
from c in db.Customers
where c.CustomerID == "A%"
select new
{
c.CustomerID,
c.CompanyName
};

Думаю, самый простой вариант - добавить после выборки примерно следующий код:
Код

      DataTable table = new DataTable();
      table.Columns.Add("CustomerId");
      table.Columns.Add("CompanyName");

      foreach (var item in q1)
      {
        DataRow row = table.NewRow();
        row[0] = item.CustomerID;
        row[1] = item.CompanyName;
        table.Rows.Add(row);
      }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)