Unirse a la propiedad de navegación con línea

c# dapper linq

Pregunta

Intento unirme a una propiedad de navegación usando LINQ. Este es mi código

    var activities = Using<GetActivitiesForUser>()
        .Execute(User.DisplayAs, User.MarketId);

    var contacts = Using<GetContactsForUser>()
        .Execute(User.DisplayAs, User.MarketId);

    var model = from activity in activities
                join contact in contacts
                on activity.ContactId equals contact.ContactId
                select activity; 

Este código solo seleccionará la actividad sin ninguna unión. La actividad tiene una propiedad llamada Contacto, y quiero unirme a esa propiedad desde Contactos.

ACTUALIZAR

Ejemplo para resolverlo

foreach(var activity in activities)
{
activity = from contact in contacts
where contact.ContactId=activity.ContactId
select contact
}

Pero quiero hacer esto con una unión.

Respuesta aceptada

Debe incluir actividades y contactos en el resultado de la consulta:

from activity in activities
join contact in contacts
on activity.ContactId equals contact.ContactId
select new { activity, contact }; 

o seleccione propiedades individuales de ambos objetos.

Editar después de tu comentario:

No podrás permitir que Dapper complete actividad. Contacto, deliberadamente se mantiene simple. Lo que puede hacer es recorrer los resultados y establecer la propiedad usted mismo:

foreach(var anon in model)
{
    anon.activity.contact = anon.contact;
}

donde modelo es la consulta .ToList() .

Otra forma efectiva pero fea podría ser:

model.Select(x => { x.activity.contact = x.contact; return activity; }).ToList();

Que devuelve inmediatamente las actividades modificadas. Es feo porque abusa de un método destinado a ser apátrida ( Select ), pero sí ...


Respuesta popular

Parece que estás usando el Entity Framework

tratar

var model = activities.Include("Contact");


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow