Помогите пожалуйста разобраться с DataTable
От: -n1l-  
Дата: 26.05.12 16:07
Оценка:
Добрый день всем. Есть определенная трудность в решении вроде бы типичной задачи.
Есть массив ранее созданный из двух столбцов таблицы datatable, необходимо перенести его в другую таблицу убрав при этом повторения.
Вроде бы вот тут
Автор: Cyberdrill
Дата: 05.12.07
есть решение но я не могу понять как мне действовать.
Помогите пожалуйста, я начинающий, 7 час мучаюсь.
Re: Помогите пожалуйста разобраться с DataTable
От: -n1l-  
Дата: 26.05.12 16:12
Оценка:
Здравствуйте, -n1l-, Вы писали:

N>Добрый день всем. Есть определенная трудность в решении вроде бы типичной задачи.

N>Есть массив ранее созданный из двух столбцов таблицы datatable, необходимо перенести его в другую таблицу убрав при этом повторения.
N>Вроде бы вот тут
Автор: Cyberdrill
Дата: 05.12.07
есть решение но я не могу понять как мне действовать.

N>Помогите пожалуйста, я начинающий, 7 час мучаюсь.

забыл уточнить, массив создан из двух столбцов и их надо обратно разделить...
Т.е. было например

кириешки партия1
кириешки партия1
кириешки партия1
кириешки партия1
кириешки партия1
кириешки партия2
кириешки партия2
кириешки партия2

поместилось в массив как
кириешки
кириешки
кириешки
кириешки
кириешки
кириешки
кириешки
кириешки
партия1
партия1
партия1
партия1
партия1
партия2
партия2
партия2

а в итоге должно быть

кириешки партия1
кириешки партия2
Re[2]: Помогите пожалуйста разобраться с DataTable
От: dmitry_npi Россия  
Дата: 26.05.12 16:49
Оценка:
Здравствуйте, -n1l-, Вы писали:

N>а в итоге должно быть


N>кириешки партия1

N>кириешки партия2



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] array1 = {
                                  "кириешки", "кириешки", "кириешки", "кириешки", "кириешки", "кириешки", "кириешки", "кириешки",
                                  "партия1", "партия1", "партия1", "партия1", "партия1", "партия2", "партия2", "партия2",
                              };

            int tableLength = array1.Length / 2;
            var column1 = array1.Take(tableLength);
            var column2 = array1.Skip(tableLength).Take(tableLength);

            var result = column1.Zip(column2, (c1, c2) => new { Column1 = c1, Column2 = c2 });

            foreach (var item in result.Distinct())
            {
                Console.WriteLine("{0} | {1}", item.Column1, item.Column2);
            }
        }
    }
}


В DataTable передайте сами. Можно вместо анонимного типа сделать свой.

Программа выводит:

кириешки | партия1
кириешки | партия2
Для продолжения нажмите любую клавишу . . .


А вообще-то, может стоило сделать DISTINCT еще в начале, в запросе?
Атмосферная музыка — www.aventuel.net
Re[3]: Помогите пожалуйста разобраться с DataTable
От: -n1l-  
Дата: 26.05.12 17:30
Оценка:
Здравствуйте, dmitry_npi, Вы писали:

_>Здравствуйте, -n1l-, Вы писали:


N>>а в итоге должно быть


N>>кириешки партия1

N>>кириешки партия2



_>
_>using System;
_>using System.Collections.Generic;
_>using System.Linq;
_>using System.Text;
_>using System.Threading.Tasks;

_>namespace ConsoleApplication2
_>{
_>    class Program
_>    {
_>        static void Main(string[] args)
_>        {
_>            string[] array1 = {
_>                                  "кириешки", "кириешки", "кириешки", "кириешки", "кириешки", "кириешки", "кириешки", "кириешки",
_>                                  "партия1", "партия1", "партия1", "партия1", "партия1", "партия2", "партия2", "партия2",
_>                              };

_>            int tableLength = array1.Length / 2;
_>            var column1 = array1.Take(tableLength);
_>            var column2 = array1.Skip(tableLength).Take(tableLength);

_>            var result = column1.Zip(column2, (c1, c2) => new { Column1 = c1, Column2 = c2 });

_>            foreach (var item in result.Distinct())
_>            {
_>                Console.WriteLine("{0} | {1}", item.Column1, item.Column2);
_>            }
_>        }
_>    }
_>}

_>


_>В DataTable передайте сами. Можно вместо анонимного типа сделать свой.


_>Программа выводит:

_>

_>кириешки | партия1
_>кириешки | партия2
_>Для продолжения нажмите любую клавишу . . .


_>А вообще-то, может стоило сделать DISTINCT еще в начале, в запросе?

я делал distinct массива, в итоге он возвращает кириешки партия1 партия2, как из этого сделать кириешки партия1
кириешки партия2 я недогадался, буду благодарен если подскажите.

и еще можно по подробнее насчет этого кода
 var column2 = array1.Skip(tableLength).Take(tableLength);

_>            var result = column1.Zip(column2, (c1, c2) => new { Column1 = c1, Column2 = c2 });
Re[4]: Помогите пожалуйста разобраться с DataTable
От: dmitry_npi Россия  
Дата: 26.05.12 18:13
Оценка:
Здравствуйте, -n1l-, Вы писали:

_>>А вообще-то, может стоило сделать DISTINCT еще в начале, в запросе?

N>я делал distinct массива, в итоге он возвращает кириешки партия1 партия2, как из этого сделать кириешки партия1
N> кириешки партия2 я недогадался, буду благодарен если подскажите.

Покажите этот запрос, так не могу сказать.

N>и еще можно по подробнее насчет этого кода


 // в исходном массиве данные колонок идут последовательно, колонок всего две, поэтому делим массив на 2 части
 int tableLength = array1.Length / 2;
 // берем половину массива от начала - это будет первая колонка
 var column1 = array1.Take(tableLength).ToList();
 // пропускаем половину массива от началаа и берем столько же - это будет вторая колонка
 var column2 = array1.Skip(tableLength).Take(tableLength).ToList();
 // специальный метод-расширение Zip позволяет "сшить" две "параллельных" последовательности.
 // аргументы:
 //  - второй массив
 //  - лямбда-функция, которая принимает два параметра (элемент первой и второй последовательности) и возвращает элемент результата.
 // В данном случае результат - это анонимный класс (без имени, то есть), с двумя полями Column1 и Column2.
 var result = column1.Zip(column2, (c1, c2) => new { Column1 = c1, Column2 = c2 });


Можно было объявить класс:

public class MyTable
{
   public string Column1 {get; set; }
   public string Column2 {get; set; }
}


И использовать его:
var result = column1.Zip(column2, (c1, c2) => new MyTable() { Column1 = c1, Column2 = c2 });

Ну а можно и просто ручками:

List<MyTable> list = new List<MyTable>();
for(int i=0; i<tableLength; ++i)
{
    MyTable t = new MyTable();
    t.Column1 = column1[i];
    t.Column2 = column2[i];
    list.Add(t);
}
Атмосферная музыка — www.aventuel.net
Re[5]: Помогите пожалуйста разобраться с DataTable
От: -n1l-  
Дата: 26.05.12 18:38
Оценка:
Здравствуйте, dmitry_npi, Вы писали:

_>Здравствуйте, -n1l-, Вы писали:


_>>>А вообще-то, может стоило сделать DISTINCT еще в начале, в запросе?

N>>я делал distinct массива, в итоге он возвращает кириешки партия1 партия2, как из этого сделать кириешки партия1
N>> кириешки партия2 я недогадался, буду благодарен если подскажите.

_>Покажите этот запрос, так не могу сказать.

а че запрос, просто вот так написал — array.Distinct().ToArry()
Re[5]: Помогите пожалуйста разобраться с DataTable
От: -n1l-  
Дата: 27.05.12 15:51
Оценка:
Здравствуйте, dmitry_npi, Вы писали:


_>Покажите этот запрос, так не могу сказать.




ну так что, вы подскажите или нет?
Re[5]: Помогите пожалуйста разобраться с DataTable
От: -n1l-  
Дата: 27.05.12 16:01
Оценка:
Простите меня за дерзость, я совсем забыл что не поблагодарил вас.
Спасибо вам за помощь.
Но хотелось бы услышать ваши идеи насчет distinct'а массива.
Еще раз больше вам спасибо.
Re[6]: Помогите пожалуйста разобраться с DataTable
От: dmitry_npi Россия  
Дата: 29.05.12 06:31
Оценка:
Здравствуйте, -n1l-, Вы писали:

N>Простите меня за дерзость, я совсем забыл что не поблагодарил вас.

N>Спасибо вам за помощь.
N>Но хотелось бы услышать ваши идеи насчет distinct'а массива.
N>Еще раз больше вам спасибо.

Да нет проблем.

По теме: а зачем вы сливали столбцы в массив? После вытягивания столбцов в один массив применять к ним Distinct() — это вообще бессмысленно и как бы даже разрушительно.

Я имел в виду, почему вы не сделали DISTINCT на стадии SQL-запроса, ведь DataTable из базы вытягивается, так?
Атмосферная музыка — www.aventuel.net
Re[7]: Помогите пожалуйста разобраться с DataTable
От: -n1l-  
Дата: 29.05.12 09:28
Оценка:
Здравствуйте, dmitry_npi, Вы писали:

_>Здравствуйте, -n1l-, Вы писали:


N>>Простите меня за дерзость, я совсем забыл что не поблагодарил вас.

N>>Спасибо вам за помощь.
N>>Но хотелось бы услышать ваши идеи насчет distinct'а массива.
N>>Еще раз больше вам спасибо.

_>Да нет проблем.


_>По теме: а зачем вы сливали столбцы в массив? После вытягивания столбцов в один массив применять к ним Distinct() — это вообще бессмысленно и как бы даже разрушительно.


_>Я имел в виду, почему вы не сделали DISTINCT на стадии SQL-запроса, ведь DataTable из базы вытягивается, так?


Я прохожу собеседование просто, и мне дали задание, построить функцию в которую в качестве параметров подается массив string[] leftColumns(созданный из двух столбцов таблицы), если применять к нему дистинкт сразу, то как потом определять сколько строк было в таблице из первого и второго столбца, так как это значение мне потом было нужно что бы построить ту самую таблицу из уникальных значений двух столбцов исходной таблицы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.