2013-02-26 2 views
4

Мне нужно вернуть список всех событий и любых rsvps, которые пользователь может иметь для события. Однако, независимо от имени пользователя, которое я передаю, он возвращает каждый rsvp. Мой запрос LINQ ->LINQ LEFT JOIN, где предложение не работает

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

Что-то кажется неправильным здесь - в частности, часть 'on events равна rsvps.Event' Может потребоваться переписать. Какое поле связывает таблицу Events с таблицей RSVP? –

+0

RSVPs.EventID = events.EventID – user1106741

+0

@ user1106741 писать 'on events.EventID равно rsvps.EventID в re' –

ответ

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

+0

@ user1106741, тогда используйте свойство навигации события –

+1

Я согласен с этим решение как мой ответ. благодаря – user1106741

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

Если вы просто хотите, чтобы фильтровать RSVPs собственность ваших событий на месте, то я думаю, вы, вероятно, могли бы использовать что-то вроде

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; 

Я бы не стал считать это аккуратным.