Учитывая, что MessageRecievers загружаются из того же контекста данных, что и сообщения, мы можем присоединить их к одному и тому же запросу.
public IQueryable<Message> GetMessages(int user_id)
{
// Get MessageReceiver tables that share receiver id
var messageReceivers = GetMessageReceivers().Where(messageReceiver => messageReceiver.receiver_id == user_id);
// get all messages that have been recieved by a user
var messages = from m in DataContext.Messages
join r in messageReceivers
on m.id equals r.message_id
select m;
//return the messages
return messages;
}
В результате SQL будет выглядеть примерно так: (при условии, что вы используете LINQ to SQL или LINQ to EF с поставщиком Microsoft SQL)
SELECT [t0].[id], ... other columns ...
FROM [Messages] AS [t0]
INNER JOIN [MessageReceivers] AS [t1] ON [t0].[id] = [t1].[message_id]