Ответ 1
var result = firms.Except(trackedFirms); // returns all the firms except those in trackedFirms
Я пытаюсь удалить список firmID из одного списка из другого. Я действительно не понимаю linq, но я уверен, что мне нужно его использовать.
List<Firm> firms = GetBusinessDevelopmentFirms(database);
List<Firm> trackedFirms = GetAllCLIFirmsBeingTrackedByUser();
var result = firms.Contains(i => trackedFirms.Contains(i.FirmID));
Последняя строка не работает, и система говорит "Неизвестный метод Содержит (?)", хотя я поставил "using System.Linq;" В верхней части класса.
Моя идея состояла в том, чтобы удалить список отслеживаемых фирм из списка всех фирм, чтобы найти необработанные фирмы.
Надеюсь, это имеет смысл.
var result = firms.Except(trackedFirms); // returns all the firms except those in trackedFirms
Из вашего кода, приведенного выше, я предполагаю, что вы пытаетесь получить записи от фирм, имеющих соответствующий элемент в 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();
Contains
- это собственный метод List<T>
, который ожидает, что вы пройдете через T
. Вместо этого вы хотите Where
.
var result = firms.Where(i => trackedFirms.Contains(i.FirmID));
Если вы ожидаете, что result
будет List<T>
, добавьте .ToList()
в конец выражения Where
LINQ.
Я думаю, что это должно работать
var result = firms.Where(x => !trackedFirms.Any(y => x.FirmID == y.FirmID));
Из всей фирмы в firms
выберите фирму, в которой не в trackedFirms
(по крайней мере, это то, что я понимаю из вашего вопроса).
Если у вас есть список X и список Y, и вы хотите удалить все элементы в Y, которые находятся в X, вы можете поэкспериментировать со следующим:
X.Intersect(У)
Сравнение двух списков и возврат отдельных значений и различий