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


Автор: swetik1981 11.11.2015, 23:36
Есть таблица, в которой содержится столбец Names, в котором через запятую перечислено несколько (в каждой строке по разному) имен.
Код


Table1
id   Fam              Names
1    Новиковы         Вася,Инга,Коля,Саша,Женя
2    Майоровы         Миша,Лена
3    Андреевы         Андрей,Маша,Зина
4    Ивановы          Ильдар,Таня,Рита,Вера



Необходимо одним LINQ-запросом без использования циклов вывести все имена в один массив.

Код

Вася
Инга
Коля
Саша
Женя
Миша
Лена
Андрей
Маша
Зина
Ильдар
Таня
Рита
Вера


Не придумалось ничего умнее, чем это:

Код

Dim q = Split(Join((From dt In dTable Select dt.Field(Of String)("Names")).ToArray, ","), ",")


Может быть есть более простое решение?

Автор: chupachups 12.11.2015, 09:43
Недостаточно информации для решения задачи:
1) могут ли быть повторяющиеся имена в исходных данных?
2) результирующий набор может содержать повторяющиеся имена или только уникальные

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Poluchit-massiv-iz-strok-s-razdelitelyami-id5643a767ae2015c5138b4567#findElement_E7045_56443523ae201544358b460b_0

Автор: chupachups 12.11.2015, 10:13
Не знаю как будет на Vbnet, на C# будет так примерно
Код

dTable.AsEnumerable()
   .Select(row => row.Field<string>("Names").Split(',').ToList())
   .Aggregate(new List<string>(), (result, next) => { result.AddRange(next); return result; })
   .ForEach(name => Console.WriteLine(name));


Хотя Ваш вариант ничем не хуже, даже проще для понимания.
Основное правило программиста: делай как можно проще - легко читать, легко сопровождать.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Poluchit-massiv-iz-strok-s-razdelitelyami-id5643a767ae2015c5138b4567#findElement_E7045_56443c25ae2015782f8b4b61_0

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