我有一个从xml文档返回的事件ID列表,如下所示
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();
}
我现在需要查询我的数据库以匹配与上述方法返回的eventIds相等的事件。所以我会有类似的东西:
从eventsdb中选择*,其中getEventIdsByEventDate()中的eventId
如何使用LINQ
执行此操作我似乎无法得到任何答案。
这是从XML提要中查找eventIds的方法
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;
}
这是在我的数据库中查找事件的方法
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);
}
这是在我的数据库中存在的XML中查找任何匹配的eventId的方法
public IEnumerable<EventFeed> FilteredEvents(DateTime eventDate)
{
return GetAllEventsFromDatabase().Where(p => GetEventIds(eventDate).Contains<EventsDetails>(p.EventShowCode));
}
项目无法构建并出现以下错误:
错误9参数'2':无法从'string'转换为'Events.EventsDetails'
答案 0 :(得分:23)
var eventids = GetEventIdsByEventDate(DateTime.Now);
var result = eventsdb.Where(e => eventids.Contains(e));
如果要在方法内返回List<EventFeed>
,则应将方法返回类型从IEnumerable<EventFeed>
更改为List<EventFeed>
。
答案 1 :(得分:12)
与我如何使用Google发现此问题一样,我想更进一步。
假设我有一个string[] states
和一个Entity
StateCounties
,我只想要返回列表中的状态,而不是StateCounties
。
我会写:
db.StateCounties.Where(x => states.Any(s => x.State.Equals(s))).ToList();
我在CheckBoxList
的样本中找到了nu-get。
答案 2 :(得分:4)
与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中试过它
答案 3 :(得分:0)
执行GetEventIdsByEventDate()方法并将结果保存在变量中,然后可以使用.Contains()方法