LINQ "Except" Operator
Asked Answered
N

1

6

i have a list of event Ids that i want to be excluded from my select statement, but no sure how to implement this:

this is what stores my list of event Ids

List<int> ExcludedEvents;

and this is my select statement (from an XML feed)

var allEvents = from eventsList in xmlDoc.Elements("shows").Elements("Show")
                select new EventFeed()
                  {
                      EventName = eventsList.Attribute("Name").Value,
                      EventSummary = eventsList.Attribute("ShortDesc").Value,
                      EventDetails = eventsList.Attribute("LongDesc").Value,
                      EventShowCode = eventsList.Attribute("Code").Value
                  };

i want to select all events except for the events that have their eventId matching the EventShowCode value

i have looked at the except operator, but not sure how to implement it

Nettie answered 12/4, 2010 at 14:10 Comment(5)
are you sure about Linq to SQL? is not it Linq to XML?Shortridge
@Shortridge It's just LINQ. You can't extend the provider, only add filtering on top of it, so it's not "to" anything. :)Urbani
@Urbani there is no just Linq. it's simplest form is Linq to Objects then.Shortridge
You don't want to use the Except extension here. Except is for when you are comparing collections of the same type. In this case, you are comparing an integer list with a collection of XML elements. Use Scott's suggestion.Aerugo
@Audie, thanks for the tip, scotts answers works a treat!Nettie
B
4

based on your code in the question, it should look something like this...

var filteredEvents = allEvents.Where(myEvent => !ExcludedEvents.Contains(myEvent.EventShowCode));

Or, if you just wanted to tack it on to the end of your select statement, just take that Where and drop it right at the end of your Select from your previous query...

var filteredEvents = xmlDoc.Elements("shows").Elements("Show") 
                     .Select( new  
                     { 
                         EventName = eventsList.Attribute("Name").Value, 
                         EventSummary = eventsList.Attribute("ShortDesc").Value, 
                         EventDetails = eventsList.Attribute("LongDesc").Value, 
                         EventShowCode = eventsList.Attribute("Code").Value 
                     })
                     .Where(myEvent => !ExcludedEvents.Contains(myEvent.EventShowCode));
Barbiturate answered 12/4, 2010 at 14:14 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.