Подтвердить что ты не робот

Вычтите общий список из другого

Я пытаюсь удалить список firmID из одного списка из другого. Я действительно не понимаю linq, но я уверен, что мне нужно его использовать.

List<Firm> firms = GetBusinessDevelopmentFirms(database);
List<Firm> trackedFirms = GetAllCLIFirmsBeingTrackedByUser();

var result = firms.Contains(i => trackedFirms.Contains(i.FirmID));

Последняя строка не работает, и система говорит "Неизвестный метод Содержит (?)", хотя я поставил "using System.Linq;" В верхней части класса.

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

Надеюсь, это имеет смысл.

4b9b3361

Ответ 1

var result = firms.Except(trackedFirms); // returns all the firms except those in trackedFirms

Ответ 2

Из вашего кода, приведенного выше, я предполагаю, что вы пытаетесь получить записи от фирм, имеющих соответствующий элемент в TrackedFirms.

List<Firm> results = Firms.Where(f => TrackedFirms.Any(t => t.FirmId = f.FirmId)).ToList();

Если, с другой стороны, вам нужны необработанные фирмы, то это:

List<Firm> results = Firms.Where(f => !TrackedFirms.Any(t => t.FirmId = f.FirmId)).ToList();

Ответ 3

Contains - это собственный метод List<T>, который ожидает, что вы пройдете через T. Вместо этого вы хотите Where.

var result = firms.Where(i => trackedFirms.Contains(i.FirmID));

Если вы ожидаете, что result будет List<T>, добавьте .ToList() в конец выражения Where LINQ.

Ответ 4

Я думаю, что это должно работать

var result = firms.Where(x => !trackedFirms.Any(y => x.FirmID == y.FirmID));

Из всей фирмы в firms выберите фирму, в которой не в trackedFirms (по крайней мере, это то, что я понимаю из вашего вопроса).