i have a list of event Ids returned from an xml document as shown below

public IEnumerable<EventFeed> GetEventIdsByEventDate(DateTime eventDate) { return (from feed in xmlDoc.Descendants("Show") from ev in feed.Elements("Event") where Convert.ToDateTime(ev.Attribute("Date").Value).ToShortDateString() == eventDate.ToShortDateString() select new EventFeed() { EventShowCode = feed.Attribute("Code").Value }).ToList(); } 

i now need to query my database to match events that equal the eventIds returned from the above method. so i would have something like:

select * from eventsdb where eventId in GetEventIdsByEventDate()

how can i do this using LINQ


i cant seem to get any of the answers working.

this is the method that looks up the eventIds from an XML feed

public IList<EventsDetails> GetEventIds(DateTime eventDate) { var eventids = (from feed in xmlDoc.Descendants("Show") from ev in feed.Elements("Event") where Convert.ToDateTime(ev.Attribute("Date").Value).ToShortDateString() == eventDate.ToShortDateString() select new EventsDetails() { EventId = feed.Attribute("Code").Value }).ToList(); return eventids; } 

this is the method that looks up the events in my database

public IEnumerable<EventFeed> GetAllEventsFromDatabase() { var allEvents = from eventsList in GetEventsList() select new EventFeed() { EventName = eventsList.Title, EventSummary = eventsList.Introduction, EventShowCode = eventsList.EventId, EventImageSmall = eventsList.EventImageThumbUrl, EventUrl = eventsList.Url, EventSortBy = eventsList.SortOrder }; return allEvents.OrderBy(x => x.EventSortBy); } 

and this is the method to look up any matching eventIds in the XML that exist in my database

public IEnumerable<EventFeed> FilteredEvents(DateTime eventDate) { return GetAllEventsFromDatabase().Where(p => GetEventIds(eventDate).Contains<EventsDetails>(p.EventShowCode)); } 

the project fails to build with the following error:

Error 9 Argument '2': cannot convert from 'string' to 'Events.EventsDetails'

1

4 Answers

 var eventids = GetEventIdsByEventDate(DateTime.Now); var result = eventsdb.Where(e => eventids.Contains(e)); 

If you are returnning List<EventFeed> inside the method, you should change the method return type from IEnumerable<EventFeed> to List<EventFeed>.

In likeness of how I found this question using Google, I wanted to take it one step further. Lets say I have a string[] states and a db Entity of StateCounties and I just want the states from the list returned and not all of the StateCounties.

I would write:

db.StateCounties.Where(x => states.Any(s => x.State.Equals(s))).ToList(); 

I found this within the sample of CheckBoxList for nu-get.

The "in" in Linq-To-Sql uses a reverse logic compared to a SQL query.

Let's say you have a list of integers, and want to find the items that match those integers.

int[] numbers = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; var items = from p in context.Items where numbers.Contains(p.ItemId) select p; 

Anyway, the above works fine in linq-to-sql but not in EF 1.0. Haven't tried it in EF 4.0

Execute the GetEventIdsByEventDate() method and save the results in a variable, and then you can use the .Contains() method

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy