LINQ кроме оператора

у меня есть список идентификаторов событий, которые я хочу исключить из моего оператора select, но не знаю, как это реализовать:

это то, что хранит мой список идентификаторов событий

List<int> ExcludedEvents;

и это мой оператор выбора (из XML-канала)

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
                  };

я хочу выбрать все события, кроме тех, у которых eventId соответствует значению EventShowCode

я просмотрел оператор кроме, но не знаю, как его реализовать


person kb.    schedule 12.04.2010    source источник
comment
вы уверены в Linq to SQL? это не Linq to XML?   -  person Andrey    schedule 12.04.2010
comment
@ Андрей Это просто LINQ. Вы не можете расширить провайдера, только добавить фильтрацию поверх него, так что это ни к чему. :)   -  person bzlm    schedule 12.04.2010
comment
@bzlm нет только Linq. тогда самая простая форма - это Linq to Objects.   -  person Andrey    schedule 12.04.2010
comment
Вы не хотите использовать здесь расширение Except. За исключением случаев, когда вы сравниваете коллекции одного типа. В этом случае вы сравниваете целочисленный список с набором элементов XML. Используйте предложение Скотта.   -  person Audie    schedule 12.04.2010
comment
@Audie, спасибо за подсказку, ответы Скотта работают!   -  person kb.    schedule 12.04.2010


Ответы (1)


исходя из вашего кода в вопросе, он должен выглядеть примерно так...

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

Или, если вы просто хотите добавить его в конец вашего оператора select, просто возьмите это Where и поместите его прямо в конец вашего Select из вашего предыдущего запроса...

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));
person Scott Ivey    schedule 12.04.2010