Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Like для множества значений 
:(
    Опции темы
swetik1981
Дата 21.12.2014, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 20.12.2007

Репутация: нет
Всего: нет



Имеется две таблицы.
Код

Table1
Ивановский
Петр
Петрович
Иванович
Автоивановск
Петров
Петровский
Сидоров
Иван
Новопетровск
Сидорцы


Код

Table2
иван
фёдор
сидор
максим


Как с использованием LINQ выбрать из Table1 только те строки, которые содержат в себе (в начале, середине или в конце) одну из строк в таблице Table2
То есть в результате должно выйти:
Код

Table3
Ивановский
Иванович
Автоивановск
Сидоров
Иван
Сидорцы


PM MAIL   Вверх
chupachups
Дата 24.12.2014, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 0
Регистрация: 15.10.2008

Репутация: нет
Всего: 1



выбирай на вкус из трех вариантов (если посидеть подольше, можно еще вариантов придумать):
Код

Console.WriteLine("--------- Вариант 1 ---------------");
var query2 =
    from parts in table2.AsEnumerable()
    select parts.Field<string>("name").ToLower();
var query1 =
    from names in  table1.AsEnumerable()
    where query2.Any(part => names.Field<string>("name").ToLower().Contains(part))
    select names.Field<string>("name");

foreach (string name in query1)
    Console.WriteLine(name);

Console.WriteLine("--------- Вариант 2 ---------------");
var results = table1.AsEnumerable()
    .Where
    (
        row =>
        {
            if (table2.AsEnumerable().Any(part => row.Field<string>("name").ToLower().Contains(part.Field<string>("name").ToLower())))
                return true;
            else
                return false;
        }
    )
    .Select<DataRow, string>
    (
        row => row.Field<string>("name")
    );

foreach (string name in results)
    Console.WriteLine(name);

Console.WriteLine("--------- Вариант 3 ---------------");
var query3 =
    from names in table1.AsEnumerable()
    let nameSource = names.Field<string>("name").ToLower()
    from parts in table2.AsEnumerable()
    let partName = parts.Field<string>("name").ToLower()
    where nameSource.Contains(partName)
    select names.Field<string>("name");

foreach (string name in query3)
    Console.WriteLine(name);


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема »


 




[ Время генерации скрипта: 0.1170 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.