簡體   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的事件。 所以我會有類似的東西:

select * from eventsdb其中getEventIdsByEventDate()中的eventId

我怎么能用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':無法從'string'轉換為'Events.EventsDetails'

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

如果要在方法內返回List<EventFeed> ,則應將方法返回類型從IEnumerable<EventFeed>更改為List<EventFeed>

就像我如何使用Google發現這個問題一樣,我想更進一步。 假設我有一個string[] states和一個數據庫Entity StateCounties ,我只想要返回列表中的狀態,而不是所有的StateCounties

我會寫:

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

我在CheckBoxList的樣本中找到了nu-get。

與SQL查詢相比,Linq-To-Sql中的“in”使用反向邏輯。

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

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中嘗試過

執行GetEventIdsByEventDate()方法並將結果保存在變量中,然后可以使用.Contains()方法

暫無
暫無

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

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