Выбор нескольких полей LINQ DataTable

Язык C#
  1. 6 года назад

    Доброго времени.
    Допустим у меня есть DataTable (с именем result)следующей структуры:
    12 Test 12.11.2012
    0 OK 05.05.2013
    13 No 10.08.2013

    Мне нужно получить результирующий набор без последнего поля. Делаю так (для упрощения убрал условие where)
    IEnumerable<DataRow> r =from row in result.AsEnumerable() select row;
    Как сделать, подскажите пожалуйста.

  2. Alexandr_Erohin

    Jul 29 Администратор
    Добавлено 6 года назад Alexandr_Erohin

    Т.к. вы не сказали названия столбцов в базе данных и куда нужно сохранять результаты, предположу что столбцы называются Id, Str и Date, вспомогательный класс MyClass1 имеет два свойства, в которые и будем сохранять данные. Код следующий:

    public class MyClass1
    {
            public int Id { get; set; }
            public string Str { get; set; }
    }

    Собственно сам запрос через LINQ to DataSet (если конечно я правильно понял вопрос, что нужно получить результаты без дат)

    IEnumerable<MyClass1> results = dataTable.AsEnumerable()
                                  .Select(s =>
                                  {
                                        return new MyClass1 { Id = (int)s["Id"], Str = s["Str"].ToString() }; 
                                  });
  3. Вопрос Вы поняли совершенно верно, спасибо. Получается, что мы формируем класс-помощник в формате которого и будет сохраняться данные перечисления. Тогда, дополнительный, возможно, Неверный из-за недопонимания вопрос: как полученный results преобразовать в набор DataRow для дальнейшего добавления в DataTable как результата? Неужто results.CopyToDataTable(); ? Хотя нет, MSDN пишет:

    Возвращает объект DataTable, содержащий копии объектов DataRow при заданном объекте IEnumerable<T> и универсальном параметре T, равном DataRow.

    . Просветите пожалуйста.

  4. Alexandr_Erohin

    Jul 29 Администратор
    Добавлено 6 года назад Alexandr_Erohin

    CopyToDataTable() просто вставляет изменную строку в таблицу

    Найти это сообщение oygemor как полученный results преобразовать в набор DataRow для дальнейшего добавления в DataTable как результата?

    Не совсем понял зачем обратно преобразовывать. Если нужна просто копия первой таблицы без столбца Date, то воспользуйтесь стандартными средствами ADO.NЕT по удалению столбца:

    dataTable.Columns.Remove("Date");
  5. Все ясно, спасибо. Тогда будет удобней работать с набором своих объектов.
    Решено, разъяснено.

или зарегистрируйтесь чтобы ответить