C#LINQ从列表中选择

我有一个从xml文档返回的事件ID列表,如下所示

public IEnumerable 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(); } 

我现在需要查询我的数据库以匹配与上述方法返回的eventIds相等的事件。 所以我会有类似的东西:

select * from eventsdb其中getEventIdsByEventDate()中的eventId

我怎么能用LINQ做到这一点


我似乎无法得到任何答案。

这是从XML提要中查找eventIds的方法

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

这是查找数据库中事件的方法

 public IEnumerable 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); } 

这是在我的数据库中查找XML中查找任何匹配的eventIds的方法

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

项目无法构建时出现以下错误:

错误9参数’2’:无法从’string’转换为’Events.EventsDetails’

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

如果要在方法内返回List ,则应将方法返回类型从IEnumerable更改为List

与我如何使用Google发现此问题相似,我想更进一步。 假设我有一个string[] states和一个数据库Entity StateCounties ,我只想要返回列表中的状态,而不是所有的StateCounties

我会写:

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

我在CheckBoxList的样本中找到了nu-get。

与SQL查询相比,Linq-To-Sql中的“in”使用反向逻辑。

假设您有一个整数列表,并希望找到与这些整数匹配的项目。

 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; 

无论如何,上面的工作在linq-to-sql中工作正常但在EF 1.0中没有。 没有在EF 4.0中尝试过

执行GetEventIdsByEventDate()方法并将结果保存在变量中,然后可以使用.Contains()方法