How to remove from one list all the items in anoth

2019-03-03 20:42发布

问题:

I'm reading a set of rows from a remote database, and a similar set from a local database, and then using RemoveAll to get rid of remote rows that are already present locally...

remote_events = (From a In remote.Events
                          Where ...etc...).ToList
local_events = (From a In local.Events
                            Where ...etc...).ToList
remote_events.RemoveAll(Function (ByVal event_row As Remote_Event)
    (From a In local_events Where a.Identifier = event_row.Identifier).Count > 0)

but this doesn't seem right to me. I don't think I should be counting things when all I really need to do is check whether a match exists. I've tried various usages of IsDBNull and IsNothing but get nonsense. I can't use .Except (as suggested here) because the list elements are not the same type.

Is there a better way of doing this?

回答1:

One way is this:

    remote_events.RemoveAll(Function(e) local_events.Exists(Function(f) f.Identifier = e.Identifier))


回答2:

I'm trying to do this without visual studio, so I'm not sure if this will work, but I'd suppose you could do something along these lines if what you're trying to do is compare the Identifier:

    Remote_Events = (From r_evt In Remote_Events
                    Where Not ((From l_evt In Local_Events Select l_evt.Identifier).Contains(r_evt.Identifier))
                    Select r_evt).ToList

I hope this helps and at least moves you in the right direction.