mon mon et j'ai une méthode qui recherche dans des produits utilisant des propriétés "Nom" et renvoie Le problème est, une partie de Les champs "Français" ou "Italian" Les champs ne sont pas attribués à DB pourtant forts>, donc ceux-ci sont et programme donne une erreur " Référence d'objet non définie sur une instance d'un objet ". P> donc j'ai ajouté un contrôle supplémentaire qui est: p> mais j'ai toujours le même < forte> erreur forte>. Quelqu'un pourrait-il aider s'il vous plaît? Je me suis confus, je ne devrais-je pas Note: strong>
Je sais que je devrais filtrer directement dans produit code> Classe:
langue code> classe: p>
Liste
_context.products.where (i => i.nameenglish.contains (RecherchedData)). Tolist (); Code>
Mais c'est pour mes tests forts> à des fins forts>, j'essaie d'utiliser "où", dans un type "liste". p>
5 Réponses :
essayez i => i.nametalien! = null && i.nametalien.contains (RecherchedData) code> et également pour l'anglais. p>
OP a dit qu'ils ont ajouté ce chèque.
Oui j'ai ajouté ce seul et string.isnullorempty contrôle
Je n'ai pas vu le ! = Null code>, seulement le
string.isnullorempty () code> qui sont vraiment i> différent du point de vue du cadre d'entité.
Mais ce produit ne va pas à EF car ils optent un tolist code> avant d'appliquer le
où code>.
Vous pouvez utiliser un opérateur conditionnel NULL si tous ces éléments sont effectivement de même pour nomitalien code>. P> p> p>
Essayer immédiatement.
Si vous modifiez les deux et avez toujours un problème, autre chose se passe et cela ne peut pas être ces lignes.
D'accord Matt cela a fonctionné, mais quelle était la différence entre "! = Null, string.isnullorempty (str)" et celui-ci? Pouvez-vous s'il vous plaît expliquer?
Semble être un comportement moins connu de Linq: Stackoverflow.com/a/772283/12431728 ... Évaluation de court-circuit ne se produit pas comme on peut s'attendre.
@MATTU mais dans ce cas, il s'agit certainement d'utiliser Linq-to-Objects.
@juhararr Oui, j'ai remarqué que, mais cela semble être le même cas.
Une autre différence est si nomengleglish code> est vide et
RecherchedData code> est vide, alors cela aboutira à
true code> pendant que le
isnullorempty code> devrait aboutir à
faux code>.
null coalesce comme p =>. . . ) ?? FAUX == VRAI CODE> RÉALISERA QUE, mais je suis entré dans la pratique consistant à vérifier Verbose NULL en raison de toujours utiliser LINQ-TO-SQL et de devoir gérer ces limitations.
Essayez ce qui suit: Si cela soulève une erreur, veuillez fournir les détails exacts d'exception et toute exception interne. Ce qui précède devrait fonctionner et lorsqu'il est passé à EF2SQL, il devrait gérer le potentiel des noms d'être nuls. P> Comme vous le mentionnez, vous souhaitez charger de la liste. Dans ce cas, vous auriez besoin d'affirmer la vérification nulle: p> List<Product> GetProductsFromSearch(int languageId, string searchedData){
if (string.IsNullOrEmpty(searchedData))
return new List<Product>();
var query = _contex.Products.ToList();
switch(languageId) //LanguageId 1 = English , LangaugeId 2 = Italian
{
case 1:
query = query.Where(i=> !string.IsNullOrEmpty(i.NameEnglish) && i.NameEnglish.Contains(searchedData));
case 2:
query = query.Where(i=> !string.IsNullOrEmpty(i.NameItalian) && i.NameItalian.Contains(searchedData));
}
return query.ToList();
}
Je recommanderais d'ajouter un enregistreur à votre contexte juste à des fins de débogage: p>
https://docs.microsoft.com / FR-US / EF / EF6 / Principes de base / Logging-et-Interception P>
Vous pouvez alors voir quelles requêtes exactes sont générées et quelle requête exacte provoque un problème. Parfois, la traduction de SQL ne fonctionne pas exactement comme si vous pensez. P>
Merci, j'ajouterai.
Ceci revient à un facteur simple. Vous devez comprendre le flux de votre logique d'affectation. Les NPES traitent toujours des asignensations variables dont plusieurs raisons peuvent être plusieurs raisons. Linq en tant que n'importe quel () qui peut être utilisé pour tester une condition sur un iEnumerable avant de devoir tirer ses résultats. Cela peut vous aider à utiliser un appareil approprié pour cette exception. P>
Pourquoi faites-vous
var produits = _Contex.products.tolist () code> qui entraînera tirer toutes les lignes de la DB. Pourquoi ne pas déterminer quel
où code> à faire avant d'appeler
tolist code> de sorte que le code soit traduit en SQL et effectué sur la base de données à la place?
Je sais que cela coûte cher, mais à des fins de test, je devrais retourner les valeurs comme celle-ci. Ceci est un projet de test, il y a donc de petites valeurs de valeur dans ma DB.
Et aussi, je veux utiliser "Où" où j'ai un type d'objet "Liste".
Il n'y a pas de différence entre vos deux "déclarations".
Sur quelle ligne de code l'exception survient-elle? En outre, veuillez coller le code exact que vous essayez car
string.isnullorempty code> ne compilera pas, c'est
string.isnullorempty code> Il est difficile de réduire les problèmes si vous essayez de transcrire où vous pensez que la question réside plutôt que de fournir le code exact.
@Sach La différence est
i.nameAnglais code> vs
i.nametalien code>.
Oh d'accord. Juste remarqué.
Je suis d'accord avec @stevepy. Cette exception peut résulter d'un couple de lignes différentes ici, nous devons donc savoir exactement celui qui l'entraîne
@Steve Py
Produits de retour.Lès (i => i.nameenglish.contains (RecherchedData)). Toli St (); Code> Cette ligne jette directement l'exception.
@Burak êtes-vous sûr que
produits code> n'est pas null?
Oui je suis sûr..
Est-il possible que
i code> est quelque peu null (par exemple l'un quelconque des éléments de
produits code> est null)?
@Matt u débogué comme 100 fois et j'ai 12 produits dans ma table, je peux écrire mon résultat "Select" si vous voulez voir.
Vous avez inspecté la liste code> de produits code> dans le débogueur et ils sont tous renseignés?
Vous avez mentionné l'ajout d'une vérification si
nomengleglish code> est null mais non si
nomItalian code> est. Avez-vous réellement protégé contre soit NULL?
@Jacob il n'y a pas de cru où ils sont tous les deux null.
@Matt u oui monsieur, ils ont peuplé.
@Burak: Ce n'est pas mon point. Avez-vous réparez-vous les deux i>
où code> clauses?
@Jacob oh je vois, oui je l'ai fait monsieur.
Mind affichant votre code complet sur lequel vous ajoutez ces chèques, au cas où vous auriez commis une légère erreur là-bas? Une erreur potentielle, par exemple aurait pu vérifier si
nomengleglish code> était null dans les deux clauses au lieu d'une vérification
nomayenglish code> et l'autre Vérification
nomanien code>. Ce doit être un problème dans la clause WHERE. Vous êtes également sûr que
recherchéddata code> n'est-ce pas NULL?
Pouvez-vous s'il vous plaît modifier le titre du message pour avoir un sens -
.where code> jamais i> retour
null code> ...