I am trying remove a list of firmIDs from one list from another. I don\'t really understand linq but I am pretty sure I need to use it.
List firm
The best approach would be Except()
for you case. However, if the List object is different then other one, you can use All()
firms.Where(x=> trackedFirms.All(y => y.FirmId != x.FirmId)
If you have list X and a list Y, and you want to remove all items in Y that are in X you can experiment with the following:
X.Intersect(Y)
Comparing two Lists and returning the distinct values and the differences
From your code above, I presume you are trying to get entries from Firms that have a corresponding item in TrackedFirms.
List<Firm> results = Firms.Where(f => TrackedFirms.Any(t => t.FirmId == f.FirmId)).ToList();
If on the other hand you want untracked firms, then it's :
List<Firm> results = Firms.Where(f => !TrackedFirms.Any(t => t.FirmId == f.FirmId)).ToList();
var result = firms.Except(trackedFirms); // returns all the firms except those in trackedFirms
Contains
is the native method of List<T>
that expects you to pass in a T
. You want Where
instead.
var result = firms.Where(i => trackedFirms.Contains(i.FirmID));
If you expect result
to be a List<T>
then add .ToList()
to the end of your Where
LINQ expression.
I think this should works
var result = firms.Where(x => !trackedFirms.Any(y => x.FirmID == y.FirmID));
From all the firm in firms
select the firm that isn't in the trackedFirms
(at least this is what i understand from your question).