2010-07-30 72 views
0

选择我问这几个星期前,但不可能得到任何工作的参考答案,所以我将有这方面的帮助表示感谢:C#LINQ从列表

我有事件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从上述方法返回的事件的XML文档。所以,我有这样的事情:

SELECT * FROM eventsdb其中EVENTID在GetEventIdsByEventDate()

我怎样才能做到这一点使用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); 
    } 

回答

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()

+0

Prutswonder嗨,我已经更新我的帖子回应你的解决方案,请你可以看看这个? thansk kb – 2010-07-30 11:05:24

+0

根据你的文章进行了更新。 ;-) – Prutswonder 2010-07-30 11:36:13

-1

下载LINQPad。它是免费的,但升级版本提供了Intellisense支持。这个应用程序帮助我找出了一些非常复杂的LINQ查询。

+0

仅供参考,这不应该是一个“答案”。它应该是一个评论。 – Ocelot20 2010-07-30 20:06:40

1

关于你的错误:

GetAllEventsByDate返回一个IEnumerable含EventFeed对象,所以当你使用“包含”的方法,它期望一个“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; 
}  
+0

感谢BPotocki,你的回答也有助于解决这个问题 – 2010-08-02 09:01:31