Joindre la propriété de navigation avec la ligne

c# dapper linq

Question

J'essaie de joindre une propriété de navigation en utilisant LINQ. C'est mon code

    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; 

Ce code sélectionnera uniquement l'activité sans aucune jointure. L'activité a une propriété nommée Contact et je souhaite joindre cette propriété à partir de Contacts.

METTRE À JOUR

Exemple pour le résoudre

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

Mais je veux le faire avec une jointure.

Réponse acceptée

Vous devez inclure les activités et les contacts dans le résultat de la requête:

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

ou sélectionnez les propriétés individuelles des deux objets.

Modifier Après votre commentaire:

Vous ne pourrez pas laisser Dapper peupler l’activité.Contactez, il est délibérément simple. Ce que vous pouvez faire, c'est parcourir les résultats et définir vous-même la propriété:

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

où model est la requête .ToList() .

Une autre façon efficace, mais laide pourrait être:

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

Qui renvoie immédiatement les activités modifiées. C'est moche car il abuse d'une méthode qui se veut sans état ( Select ), mais oui ...


Réponse populaire

Il semble que vous utilisiez Entity Framework

essayer

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



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi