C#LINQ从列表中选择

kb.*_*kb. 19 c# linq

我有一个从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();  
    }
Run Code Online (Sandbox Code Playgroud)

我现在需要查询我的数据库以匹配等于从上述方法返回的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;
    }
Run Code Online (Sandbox Code Playgroud)

这是查找数据库中事件的方法

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);
    }
Run Code Online (Sandbox Code Playgroud)

这是查找我的数据库中存在的XML中任何匹配的eventIds的方法

public IEnumerable<EventFeed> FilteredEvents(DateTime eventDate)
    {

        return GetAllEventsFromDatabase().Where(p => GetEventIds(eventDate).Contains<EventsDetails>(p.EventShowCode)); 
    }
Run Code Online (Sandbox Code Playgroud)

项目无法构建时出现以下错误:

错误9参数'2':无法从'string'转换为'Events.EventsDetails'

Kya*_*ein 26

        var eventids = GetEventIdsByEventDate(DateTime.Now);
        var result = eventsdb.Where(e => eventids.Contains(e));
Run Code Online (Sandbox Code Playgroud)

如果要List<EventFeed>在方法内部返回,则应将方法返回类型从更改IEnumerable<EventFeed>List<EventFeed>.


fox*_*azz 12

就像我如何使用Google发现这个问题一样,我想更进一步.假设我有一个string[] states和一个db Entity,StateCounties我只想要从列表中返回的状态而不是全部StateCounties.

我会写:

db.StateCounties.Where(x => states.Any(s => x.State.Equals(s))).ToList();
Run Code Online (Sandbox Code Playgroud)

我在CheckBoxListnu-get 的样本中找到了这个.


Mat*_*sca 5

与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;
Run Code Online (Sandbox Code Playgroud)

无论如何,以上内容在linq-to-sql中可以正常工作,但在EF 1.0中则不能。没在EF 4.0中尝试过