Cargar propiedades de navegación con filtro para Entity Framework 4.3.

Hace unos días pongo unpregunta en relación con el mapeo de dos clasesMessage yMessageStatusHistory utilizando EF. El mapeo va bien pero estoy enfrentando algunos problemas con la propiedad de navegaciónStatusHistory en la claseMessage que se relaciona conMessageStatusHistory objetos. Estoy cargando los mensajes para un solo usuario y deseo los estados correspondientes a ese usuario solamente. Al igual que me gustaría mostrar si el usuario ha marcado el mensaje como leído / no leído y cuándo. Si utilizo un mecanismo de carga predeterminado como el siguiente, se carga todo el historial relacionado con el mensaje, independientemente del usuario:

IDbSet<Message> dbs = _repo.DbSet;
dbs.Include("StatusHistory").Where(x=>x.MessageIdentifier == msgIdentifier);

Para filtrar el historial de un solo usuario, he intentado el siguiente truco:

IDbSet<Message> dbs = _repo.DbSet;
var q = from m in dbs.Include("StatusHistory")
        where m.MessageIdentifier == msgIdentifier
        select new Message
        {
            MessageIdentifier = m.MessageIdentifier,
            /*OTHER PROPERTIES*/
            StatusHistory = m.StatusHistory
                             .Where(x => x.UserId == userId).ToList()
        };

return q.ToList();//THROWING ERROR ON THIS LINE

Estoy recibiendo el error:

The entity or complex type 'MyLib.Biz.Message' cannot be constructed in a LINQ 
to Entities query.

Lo he intentado comentandoStatusHistory = m.StatusHistory.Where(x => x.UserId == userId).ToList() También, pero no ha ayudado.

Por favor, ayúdame a obtener mensajes con StatusHistory filtrado.

EDITAR:- Lo anterior se resuelve con este código:

var q = from m in _repository.DBSet.Include("Histories")
        where m.MessageIdentifier == id
        select new {
                     m.Id,/*OTHER PROPERTIES*/
                     Histories = m.Histories.Where(x => 
                                   x.SenderId == userId).ToList()
                   };

var lst = q.ToList();
return lst.Select(m => new Message{
           Id = m.Id, MessageIdentifier = m.MessageIdentifier, 
           MessageText = m.MessageText, Replies = m.Replies, 
           ReplyTo = m.ReplyTo, Histories = m.Histories, SenderId = 
           m.SenderId, SenderName = m.SenderName, CreatedOn = m.CreatedOn
       }).ToList();

Pero si intento incluir respuestas al mensaje con:

from m in _repository.DBSet.Include("Replies").Include("Histories")

Estoy recibiendo un error al convertir la consulta a la lista conq.ToList() paraHistories = m.Histories.Where(x=> x.SenderId == userId).ToList().

Respuestas a la pregunta(1)

Su respuesta a la pregunta