Форум программистов, компьютерный форум, киберфорум
LINQ
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
274 / 63 / 4
Регистрация: 18.04.2011
Сообщений: 1,362
Записей в блоге: 1
1

Выбрать людей которые есть в одной списке, но нет в другом через LINQ

16.02.2017, 20:10. Показов 2506. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
есть две базы данных, в каждой базе есть таблица "люди" в этой таблице есть колонка "ID" которая идентифицирует человека.
некоторые люди могут одновременно быть в одной базе данных и в другой, а некоторые только во второй.

Если мне нужен вывести через SQL список тех кто есть во второй таблице, но нет в первой то выйдет примерно такое:
SQL
1
2
3
4
5
6
7
8
9
10
SELECT  [row_id]
      ,[_id]
      ,[_name]
      ,[_enable]
  FROM [Database2].[dbo].[people]
  WHERE _id NOT IN (
                    SELECT _id
                 FROM [Database1].[dbo].[people]
                            ) 
AND _enable = '1
'
(примерное описание как аналог)

а как такое написать с помощью LINQ?
В проекте две базы данных переведены в EntityFramework

C#
1
2
3
4
5
6
7
8
using (var db1 = new db1Entities())
            {
                 
                 using (var db2 = new db2Entities())
                 {
                     
                 }
            }
но без г-кода не выходит реализовать задачу.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.02.2017, 20:10
Ответы с готовыми решениями:

Как найти буквы которые есть в одном слове, но нет в другом
Есть два слова, слова похожи, но отличаются несколькими буквами, как найти эти буквы?

Выбрать id из двух таблиц где есть в одной и нет в другой
Всем привет. Имеется 2 таблицы. Некоторые ID из первой таблицы заносится во вторую. Нужно...

Выбрать упорядоченный по алфавиту список файлов в каталоге /etc, на которые есть более одной жесткой ссылки
Выбрать упорядоченный по алфавиту список файлов в каталоге /etc, на которые есть более одной...

[Есть два проекта] С множественным определением main - в одном есть LNK2005 в другом нет
Есть два проекта: 2017.09.21 - Educational Codeforces Round 29 и 2020.01.23 - Hello 2020. В обоих...

6
644 / 528 / 324
Регистрация: 20.05.2015
Сообщений: 1,469
17.02.2017, 04:46 2
Такого г-кода?)
C#
1
var basa = db1.people.Where(p=>(db1.people.Select(p1=>p1.id).ToList().Except(db2.people.Select(p2=>p2.id).ToList())).Contains(p.id))
по идее можно через IEqualityComparer организовать.
0
274 / 63 / 4
Регистрация: 18.04.2011
Сообщений: 1,362
Записей в блоге: 1
17.02.2017, 15:20  [ТС] 3
что-то очень похожее пытался вывести, правда не знал как применить в этом случаи Contains.
но и в данном случаи результат не ахти,при обращении к первому элементу, получаю исключение:

"{System.NotSupportedException: The specified LINQ expression contains references to queries that are associated with different contexts.
"
0
644 / 528 / 324
Регистрация: 20.05.2015
Сообщений: 1,469
19.02.2017, 22:16 4
Можно попробовать разбить
C#
1
2
3
4
List<int> li = db1.people.Select(p1=>p1.id).ToList();
List<int> li2 = db2.people.Select(p2=>p2.id).ToList());
List<int> li_ex = db1.people.Select(p1=>p1.id).ToList().Except(db2.people.Select(p2=>p2.id).ToList());
var basa = db1.people.Where(p=>li_ex.Contains(p.id));
Добавлено через 54 минуты
Гоню
C#
1
2
3
4
List<int> li = db1.people.Select(p1=>p1.id).ToList();
List<int> li2 = db2.people.Select(p2=>p2.id).ToList());
List<int> li_ex = li.Except(li2);
var basa = db1.people.Where(p=>li_ex.Contains(p.id));
0
Эксперт .NET
17689 / 12874 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
20.02.2017, 10:32 5
Цитата Сообщение от magals Посмотреть сообщение
В проекте две базы данных переведены в EntityFramework
Насколько мне известно, EF не поддерживает межбазовые запросы.
Все вышеприведенные решения сначала тянут данные из одной базы на сторону клиента, там формируют новый запрос и отсылают его во вторую базу на обработку.
Мало того, что это неэффективно, так еще и добавляет утечку данных, потенциально конфиденциальных (на мой комп прилетают ID всех пользователей первой базы).

Я бы на вашем месте лучше в какой-нибудь из баз сделал представление и делал из него обычную select-выборку на стороне клиента.
1
274 / 63 / 4
Регистрация: 18.04.2011
Сообщений: 1,362
Записей в блоге: 1
10.03.2017, 18:33  [ТС] 6
Благодарю за совет, да уже так и было сделано, сделал нативный- SQL запрос, хоть в коде среди решений сделанных на EF выглядит не ахти, но зато очень простым.
0
Эксперт .NET
17689 / 12874 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
10.03.2017, 23:44 7
Цитата Сообщение от magals Посмотреть сообщение
сделал нативный- SQL запрос, хоть в коде среди решений сделанных на EF выглядит не ахти
Вместо составления запроса на стороне клиента, можно в базе создать представление и в приложении привязать к нему через EF класс.
0
10.03.2017, 23:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.03.2017, 23:44
Помогаю со студенческими работами здесь

Выбрать уникальные значения. Выбрать числа которые есть в обоих массивах
Всем доброго времени суток! Ребята , у меня есть 2 массива , они заполняются рандомными числами ,...

LINQ to XML выбрать все элементы у которых есть определенный аттрибут
Здарвствуйте подскажите как с помошью LINQ to XML выбрать все элементы у которых есть аттрибут с...

С помощью QReport вывести фото для всех людей, которые есть в Query
Доброе время суток! У меня БД в Access, в ней поле фото (тип строка). При формировании отчета с...

SQL-запрос "выбрать из таблицы людей, которые старше 25 лет"
Здравствуйте. Скажите пожалуйста, как выбрать из таблицы людей, которые старше 25 лет, дата...

Удалить из файла строки, которые есть в другом файле
Никак не могу решить казалось бы простую задачку. Файл1: allow 192.168.1.2...

Удалить из списка L все элементы, которые есть в списке L1
Используйте линейные списки для хранения последовательности чисел. Опишите процедуру или функцию,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru