2010-07-30 50 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