簡體   English   中英

C#LINQ從列表中選擇

[英]C# LINQ select from list

我幾個星期前問過這個問題,但無法獲得任何建議的答案,因此,我將不勝感激:

我有一個從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相等的事件。 所以我會有類似的東西:

從eventdb中選擇*,其中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);
    }

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

關於您的錯誤:

GetAllEventsByDate返回一個包含EventFeed對象的IEnumerable,因此,當您使用“包含”方法時,它期望“ 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;
}    

下載LINQPad。 它是免費的,但升級版提供了Intellisense支持。 這個應用程序幫助我找出了一些非常復雜的LINQ查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM