2010-06-25 96 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-得到。