J'ai un problème avec une requête LINQ. Je l'ai utilisé de la même manière que je ne peux pas comprendre ce qui pourrait être faux maintenant.
Erreurs forts> P> La meilleure correspondance de la méthode surchargée pour
'System.Collections.Generic.List.Contains (int)'
a des arguments invalides code: strong> p> aucune idée de ce qui se passe? P> Toute aide appréciée,
Argument '1': impossible de convertir de 'int?' à 'int'; se réfère à la clause de RTestrésults P>
blockQuote>
Merci p> p>
3 Réponses :
C'est parce que le champ ID est nullable, tandis que les éléments de la collection ne sont pas.
Vous avez probablement oublié de le marquer comme non-null dans la base de données, donc le concepteur, le généré de cette façon. P> Meilleur chose à chose dans la DB est non-NULL et rafraîchissez les données. P>
En plus, vous n'avez pas spécifié qui LINQ Vous utilisez, en vous supposant que LINQ The DB, je ne suis pas sûr que la méthode d'extension contient fonctionne dans Linq à SQL ou Linq aux entités, vous pourriez obtenir Une autre notaupportedexception même après que vous fixiez ce qui précède. p>
Par conséquent, utilisez deux requêtes, le premier à accéder à la DB et à la seconde pour extraire votre valeur de la collection chargée ou envisagez d'utiliser " Contient () "Solution de contournement utilisant Linq vers des entités? . P>
et si vous Utilisez des objets Linq-à des objets et vous ne vous souciez pas de toute la corbeille indiquée ci-dessus, utilisez simplement le fo LLOWING: P>
var rTestResults = from rT in mDataContext.TestSamplesViews
where rT.PlateID.HasValue &&
rMTCPlates.Contains(rT.PlateID.Value)
select rT.Value;
Vous pouvez utiliser le opérateur null-coalescent ici:
var rTestResults = from rT in mDataContext.TestSamplesViews
where rMTCPlates.Contains(rT.PlateID ?? 0)
select rT;
Vous pouvez également utiliser RT.PLATED.GETVALUEDEFAULT (), qui utilisera toute la valeur par défaut pour votre type s'il est null.
Depuis l'exception dans ON Si vous voulez juste un correctif EasyQuick, et / ou vous ne pouvez pas changer SYSTEM.Collections.Generic.List.Contains (int) Code> Je peux deviner que le mdataContext.teStsamplesviewss.Le plaqueide code> est nullable. plaqueid code> de sorte qu'il n'est plus nullable, vous pouvez vérifier s'il a une valeur d'abord: p> var rTestResults = from rT in mDataContext.TestSamplesViews
where (rT.PlateID.HasValue && rMTCPlates.Contains(rT.PlateID))
select rT;