2013-02-26 132 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; 

我不認爲它是整潔,雖然。