2010-06-25 42 views
12

選擇,我有如下圖所示C#LINQ從列表

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從上述方法返回的事件事件的IDS從XML文檔返回一個列表。所以,我有這樣的事情:

SELECT * FROM eventsdb其中EVENTID在GetEventIdsByEventDate()

我怎樣才能做到這一點使用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中的任何匹配eventIds

public IEnumerable<EventFeed> FilteredEvents(DateTime eventDate) 
    { 

     return GetAllEventsFromDatabase().Where(p => GetEventIds(eventDate).Contains<EventsDetails>(p.EventShowCode)); 
    } 

項目失敗建立與以下錯誤:

錯誤9參數「2」:不能從「字符串」轉換爲「Events.EventsDetails」

+0

KB:你對此有一個明確的答案了嗎?你能不能標出來,以便我們知道正確的答案。 – theraneman 2010-06-25 12:31:57

回答

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

如果您returnning List<EventFeed>裏面的方法還沒有嘗試過,你應該在方法的返回類型更改從IEnumerable<EventFeed>List<EventFeed>

0

執行GetEventIdsByEventDate()方法和結果保存在一個變量中,然後可以使用。載()方法

4

的「中的」在LINQ到SQL使用相比於SQL查詢的反向邏輯。

假設你有一個整數列表,並希望找到匹配的整數的項目。

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

11

在我是如何發現使用谷歌這個問題相似,我希望把它一步。 可以說我有一個string[] states和DB EntityStateCounties,我只是想從列表中的狀態回來了,不是所有的StateCounties的。

我會寫:

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

我發現這個的CheckBoxList對樣品中NU-得到。