我有一个从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
执行此操作感谢 KB
您好Prutswonder,我根据您的建议创建了以下方法
public IEnumerable<EventFeed> foo(DateTime str)
{
var foo = from f in GetAllEventsFromDatabase().ToList()
where GetAllEventsByDate(str).Contains(f.EventShowCode)
select e;
return (IEnumerable<EventFeed>) foo;
}
但是在编译时我得到以下错误
Error 7 The type arguments for method 'System.Linq.Enumerable.Contains<TSource>(System.Collections.Generic.IEnumerable<TSource>, TSource)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
GetAllEventsFromDatabase:
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);
}
答案 0 :(得分:2)
GetEventIdsByEventDate()
方法应返回IEnumerable
个字符串,包含事件ID(如方法名称所示):
public IEnumerable<string> 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 feed.Attribute("Code").Value
).ToList();
}
另外,不要忘记将foo()
方法重命名为更合适的名称(例如GetEventsByEventDate()
)
答案 1 :(得分:1)
关于您的错误:
GetAllEventsByDate返回包含EventFeed对象的IEnumerable,因此当您使用“Contains”方法时,它期望“EventFeed”对象与列表中的对象进行比较。相反,你传递的是一个f.EventShowCode,我假设它是一个整数或其他东西:
EventShowCode = eventsList.EventId
我相信你所寻找的是:
public IEnumerable<EventFeed> foo(DateTime str)
{
var foo = from f in GetAllEventsFromDatabase()
where GetAllEventsByDate(str).Contains(f)
select f;
return foo;
}
答案 2 :(得分:-1)
下载LINQPad。它是免费的,但升级版本提供了Intellisense支持。这个应用程序帮我找出了一些非常复杂的LINQ查询。