7
votes

LINQ à SQL JOIN

J'essaie d'utiliser la linq suivant sur SQL dans mon code: xxx

L'erreur se produit sur la deuxième ligne de jointure (3ème ligne dans toute la requête ci-dessus) - J'avais l'habitude de Demandez-le de sorte que cela vient de rejoindre S.Id et Pop.accountid et qui a fonctionné parfait, mais maintenant j'ai introduit une autre jointure Criticieria (la syncno), je reçois l'erreur suivante:

"Le type d'une des expressions dans La clause de jointure est incorrecte. Taper L'inférence a échoué dans l'appel à 'Groupjoin' "

Des idées? Certaines notes:

1: "La variable" Syncno "est longue, de même que la valeur dans la DB (Bigint). La valeur dans la DB est nullable, donc j'ai aussi essayé "longtemps?" Comme le type de variable

2: AccsandPurchase est une classe personnalisée que j'ai faite, comme vous pouvez probablement deviner

merci


0 commentaires

3 Réponses :


27
votes

Essayez de spécifier les mêmes noms de clés de jointure E.g.

join pop in dc.POPTransactions on new { Key1 = s.ID, Key2 = syncNo } equals new {Key1 = pop.AccountID, Key2 = pop.SyncNo }


1 commentaires

@PNP Pas sûr de LINQ vers SQL, cependant EF est suffisamment intelligent pour générer une jointure à gauche ou intérieure précise



5
votes

de la MSDN DOCS:

Type Inference sur les touches composites dépend sur les noms des propriétés des clés et de la commande dans laquelle ils se produisent. Si les propriétés des séquences source ne possèdent pas les mêmes noms, vous devez attribuer de nouveaux noms dans les clés. Par exemple, si la table des commandes et la table de commandeDétails ont utilisé des noms différents pour leurs colonnes, vous pouvez créer des touches composites en attribuant des noms identiques dans les types anonymes: xxx

http://msdn.microsoft.com /en-us/library/bb907099.aspx


0 commentaires

1
votes

Ce problème se produit souvent lorsque vous comparez les propriétés de différents types aussi. Tels que la comparaison d'un court à un int, ou d'une chaîne à un int, etc. Les noms doivent correspondre, mais lorsque votre comparaison a déjà des noms égaux et que vous ne trouvez pas le problème, vérifiez si elles sont également du même type. xxx

dans cet exemple, si t.entitytype est court , qui est comparé à un entier , il vous donnera également la Message:

"Le type d'une des expressions de la clause de jointure est incorrect. Type Inference a échoué dans l'appel à" Groupjoin ""


0 commentaires