2013-02-26 145 views
4

我需要返回所有事件的列表以及用户可能对事件进行的任何rsvps。但是,无论我传递的用户名是什么,它都会返回每个rsvp。我的LINQ查询 - >LINQ LEFT JOIN where子句不起作用

return (from events in this._context.Context.Events 
      join rsvps in (this._context.Context.RSVPs 
          .Where(o=> o.UserName == userName)) 
      on events equals rsvps.Event into re 
      from rsvps in re.DefaultIfEmpty() 
      select events); 

关系
Events.EventID = RSVPs.EventID

+1

有些东西在这里似乎有误 - 特别是关于事件的部分等于rsvps.Event'重写可能是必要的。什么字段将Events表与RSVPs表关联? – 2013-02-26 06:42:05

+0

RSVPs.EventID = events.EventID – user1106741 2013-02-26 06:44:56

+0

@ user1106741在'events.EventID等于rsvps.EventID写入're' – 2013-02-26 06:56:38

回答

9
from e in _context.Context.Events 
join r in _context.Context.RSVPs.Where(o => o.UserName == userName) 
    on e.EventID equals r.EventID into g 
select new { 
    Event = e, 
    Rsvps = g 
}; 
+0

我不想创建一个匿名类型 – user1106741 2013-02-26 07:06:14

+0

@ user1106741然后使用事件的导航属性 – 2013-02-26 08:03:47

+1

我会接受这个解答作为我的答案。谢谢 – user1106741 2013-02-26 08:26:31

0

这样来做:

return (from events in this._context.Context.Events 
     join rsvps in this._context.Context.RSVPs 
     on events.EventIDequals equals rsvps.EventID into re 
     from c in re.DefaultIfEmpty() 
     where c.UserName == userName 
     select new {events,rsvps}); 
0

如果你只是要筛选的回函你的活动的财产就地,那么我想你可能会使用类似于

var events = _context.Context.Events; 

foreach(var event in events) 
{ 
    // Assuming the property is named RSVPs 
    event.RSVPs = event.RSVPs.Where(o => o.UserName.Equals(userName)); 
} 

return events; 

我不认为它是整洁,虽然。