Comment JOINIRE des tables sur des colonnes NULLable?LINQ-Joindre des tables sur des colonnes NULL
je suit LINQ-requête, RMA.fiCharge
peut être NULL:
Dim query = From charge In Services.dsERP.ERP_Charge _
Join rma In Services.dsRMA.RMA _
On charge.idCharge Equals rma.fiCharge _
Where rma.IMEI = imei
Select charge.idCharge
je reçois une "conversion de type 'DBNull' taper 'entier' est pas valide" dans query.ToArray()
:
Dim filter = _
String.Format(Services.dsERP.ERP_Charge.idChargeColumn.ColumnName & " IN({0})", String.Join(",", query.ToArray))
Donc, je pourrais ajouter un WHERE RMA.fiCharge IS NOT NULL
dans la requête. Mais comment faire cela dans LINQ ou y a-t-il une autre option?
Merci d'avance.
Solution:
Le problème est que le DataSet ne supporte pas nullables-types, mais génère un InvalidCastException si vous interrogez les NULL-valeurs sur une colonne entière (grâce Martinho). La requête LINQ modifiée de dahlbyk fonctionne avec peu de modifications. Le DataSet génère une propriété booléenne pour chaque colonne avec AllowDbNull = True, dans ce cas IsfiChargeNull
.
Dim query = From charge In Services.dsERP.ERP_Charge _
Join rma In (From rma In Services.dsRMA.RMA _
Where Not rma.IsfiChargeNull
Select rma)
On charge.idCharge Equals rma.fiCharge _
Where rma.IMEI = imei
Select charge.idCharge
Utilisez-vous des entrées nullables? Pourquoi avez-vous tagué cela avec linq-to-objects? LINQ-to-Objects n'a pas de ** SQL **. –
Non, le DataColumn dans l'ensemble de données typé est de type entier. –
Voilà votre problème. Vous avez besoin d'ints nullable. –