Как удалить строки datatable1, имеющие другой идентификатор, при сравнении с datatable2

Учитывая, что первая таблица данных содержит основные данные, а вторая таблица имеет необходимые идентификаторы данных, мне нужно удалить строки из первой таблицы, которых нет во второй таблице. Я пытаюсь использовать LINQ.

Таблица данных 1:

НЕТ Имя Позиция Группа 1 Джон Художник Индия 2 Отметка Шайба Индия 3 Питер Офицер Непал 4 Ангел Офицер Индия 5 Бибин Шайба Непал 6 Джерри Художник Непал

Таблица данных 2:

НЕТ 1 2 3

Таблица результатов:

НЕТ Имя Позиция Группа 1 Джон Художник Индия 2 Отметка Шайба Индия 3 Питер Офицер Непал

Я попробовал этот запрос:

 var qry1 = datatable1.AsEnumerable().Select(a => new { NO.ToString() });
 var qry2 = datatable2.AsEnumerable().Select(b => new { NO.ToString() });
 var newTable = qry1.Except(qry2);

но я получаю строки, которых нет. Многие процессы я пытался получить результат.

Попробуйте Intersect вместо Except?

GriffeyDog 10.07.2024 15:34
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я предполагаю, что (1) вы хотите выбрать совпадающие строки из ваших таблиц данных, а не удалять несовпадающие строки из источника, и (2) вы хотите, чтобы в ваших результатах были целые строки, а не только значения столбца NO.

Возможно, вам понадобится что-то из следующего:

var query =
    from t1 in datatable1.AsEnumerable()
    join t2 in datatable2.AsEnumerable() on t1.NO equals t2.NO
    select t1;
var query = datatable1.AsEnumerable()
    .Where(t1 => datatable2.AsEnumerable().Select(t2 => t2.NO).Contains(t1.NO));
var query = datatable1.AsEnumerable()
    .Where(t1 => datatable2.AsEnumerable().Any(t2 => t2.NO == t1.NO);
var selectedKeys = datatable2.AsEnumerable().Select(t2 => t2.NO).ToHashSet();
var query = datatable1.AsEnumerable().Where(t1 => selectedKeys.Contains(t1.NO));

Если коллекция datatable2 большая, я бы склонился к версиям join или HashSet для повышения эффективности. HashSet поиск выполняется намного быстрее, чем повторяющееся Enumerable сканирование.

Другие вопросы по теме