-2
votes

Comment convertir cette instruction SQL dans une expression Lambda / Linq

Je recherche l'expression équivalente LINQ Lambda pour cette déclaration SQL. XXX PRE>

Voici les entités. J'ai ajouté des commentaires pour illustrer la référence aux tableaux et aux champs de la requête SQL. P>

Ce tableau des utilisateurs des utilisateurs et il est monté comme une vue matérialisée. P>

// TABLE TRAINING_MITT
public class IcsTrainingMitt
{
    // Field TRAINING_ID             
    public int TrainingId { get; set; }

    // Field MITT_COURSE_ID_TXT
    public string MittCourseId { get; set; }
    public virtual IcsTraining IcsTraining { get; set; }
}

public class IcsTraining
{
    public int TrainingId { get; set; }
    public string TrainingName { get; set; }
    public virtual ICollection<IcsTrainingRole> IcsTrainingRoles { get; set; }
    public virtual ICollection<IcsTrainingMitt> IcsTrainingMitt { get; set; }
}


public class IcsRole
{
    public int RoleId { get; set; }
    public int SectionId { get; set; }
    public string RoleName { set; get; }
    public virtual ICollection<IcsTrainingRole> IcsTrainingRoles { get; set; }
}


5 commentaires

Ne pas. LINQ n'est pas SQL ou un remplacement à SQL. C'est une langue utilisée avec les ormes. Configurez vos entités orm correctement, ajoutez des relations et des propriétés de navigation appropriées, et votre orèse générera l'instruction SQL de la requête LINQ


Compte tenu de cette requête, je soupçonne que l'ORM se retrouvera avec une requête plus propre. Il n'y a aucune raison d'utiliser des sous-requêtes après le où A.User_id in , des jointures simples produiraient le même plan d'exécution.


Veuillez ajouter votre code modèle d'entité dans la question.


@Kaffekopp: mettre à jour la question avec le modèle d'entité.


Peut-être mon Recette SQL à Linq pourrait vous aider?


3 Réponses :


0
votes

Si vous réécrivez votre code à l'aide de jointures, il ressemblera à ceci:

SELECT A.USER_ID, A.GIVEN_NAME, A.SURNAME, A.REGION, A.EMAIL 
FROM USER A
JOIN TRAINING_COURSE B ON A.USER_ID = B.USER_ID_TXT
JOIN TRAINING_MITT C ON B.COURSE_ID_TXT = C.MITT_COURSE_ID
JOIN TRAINING_ROLE D ON C.TRAINING_ID = D.TRAINING_ID AND D.ROLE_ID = 3011


0 commentaires

0
votes

Utilisation de la syntaxe de requête LINQ avec vos classes de modèle à l'aide de jointures (comme suggéré par Hogan): xxx

Je pense que la syntaxe de requête devrait être beaucoup plus claire que d'utiliser Lambdas, depuis le modèle semble manquer de propriétés de navigation appropriées.


0 commentaires

0
votes

OK, l'utilisation d'une jointure est efficacement plus simple et basée sur le poste de @Kaffekopp, l'expression équivalente à l'aide de Lambdas serait alors la suivante: xxx


0 commentaires