Je recherche l'expression équivalente LINQ Lambda pour cette déclaration SQL. 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; }
}
3 Réponses :
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
Utilisation de la syntaxe de requête LINQ avec vos classes de modèle à l'aide de jointures (comme suggéré par Hogan): 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. P> p>
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:
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 i> 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 code>, 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 A> pourrait vous aider?