quando la query Lambda Usa "Contiene" e non corrisponde alla condizione "Riferimento oggetto non impostato su un'istanza di un oggetto" l'errore ritorna

piattaforma C #, Rete dei puntini 4.0

var city0 = DataCache.GetAllCities().Where(c => c.GeoName.Contains("Dubai")).FirstOrDefault();

la Variable Duabi esiste nei dati e questo restituisce oggetto città

var city1 = DataCache.GetAllCities().Where(c => c.CityID== 23804982) .FirstOrDefault();

l'id 23804982 non esiste nei dati e questo restituisce l'oggetto nullo

var city2 = DataCache.GetAllCities().Where(c => c.GeoName.Contains("WrongCityName")).FirstOrDefault();

la variabile WrongCityName non esiste nei dati e questo restituisce il seguente errore.

il riferimento oggetto non è impostato su un'istanza di un oggetto.

[Edit] Ho ricevuto l'errore quando l'ultima query eseguita. non quando valuti City2


En title : When Lambda query Use ‘Contains’ and it does not match the condition “Object reference not set to an instance of an object” error returns

8 Comments:

  1. beh, city2 sarà nullo, perché hai usato FirstOrDefault - e il valore predefinito per le classi è nullo.

    si dovrebbe controllare per nullità prima di utilizzarlo:

    if (city2 != null)
    {
        // Okay, I found a matching city. Now I can use it
    }
    

    ora che sta assumendo il codice che hai effettivamente dato è in esecuzione senza problemi. non sarebbe se c.GeoName fosse nulla per qualche città... perché si sarebbe chiamata Contains su un riferimento nullo. è possibile risolvere questo problema con:

    var city2 = DataCache.GetAllCities()
                         .Where(c => c.GeoName != null &&
                                     c.GeoName.Contains("WrongCityName"))
                         .FirstOrDefault();
    
    1. ho usato il blocco if (City2! = null). ma non vi arriverà. prima di questo ho ottenuto il messaggio di errore 'Object reference not set to a existanza di un oggetto'
    1. @Jomy: Vedere la mia modifica. e 'probabilmente perché hai una città senza GeoName. la prima query avrebbe lo stesso problema, ma presumibilmente Dubai viene prima nella sequenza della città rispetto alla città con un GeoName nullo.
  2. quando si ottiene l'errore? è quando si tenta di utilizzare city2 o è quando la query viene eseguita?
  3. ho ottenuto l'errore quando la query eseguita. e la ragione era GeoName contiene null.

More similar articles:

  • hai bisogno di aiuto per questa base Contiene <>() il metodo di estensione e le espressioni Lambda</>
  • utilizzo di String.Split () .Contiene () sulla colonna CSV usando Linq/Lambda
  • ritorna la pagina PHP dal gestore percorso ASP
  • il metodo di SemaphoreSlim Wait (Int32) ritorna immediatamente quando è passato zero?
  • utilizzando Moto a Mock Lambda Response ritorna 'b "errore in esecuzione lambda: (2,' WaitNamedPipe ',' Il sistema non può trovare il file specificato. ')' '
  • ottenere errori in MVC Proj durante la scrittura di Lambda Expression
  • List.Contiene non ritorna vero quando esiste un elemento
  • creazione di una Lambda Contiene l'espressione
  • lambda interno Lambda
  • miglioramento delle prestazioni per Lambda utilizzando Array.Contiene?
  • usare Linq Lambda Espressione testata per unire due liste
  • classe C # Contiene Riferimento di un'altra classe come campo statico
  • ritorna il risultato di Linq a un dataset - GetCommand Non è una proprietà
  • elenco Contiene () con PLinq?
  • ritorna PartialView con Ajax non inserito nella pagina
  • costruisca Espressione di C # Lambda Con Riferimento ad Elenco Articolo
  • perché GetWindowThreadProcessId ritorna quando viene chiamato da w3wp.exe
  • quando si usa Contiene su una Coda di Array la Console ritorna Falsa. perché? perché?
  • come usare string.Contiene per l'elenco dei valori
  • string.Contiene con Linq To Sql ritorna un'eccezione Null
  • Ping.Send (ip, timeout) in .Net ritorna troppo veloce e si lamenta del timeout
  • azione/Domanda di gestione della memoria di espressione Lambda
  • costruire l'albero di espressione per string.Contiene
  • metodo 'Boolean Contiene..' non ha alcuna traduzione supportata da SQL
  • ottenere i valori della collezione da Expression con Lambda - .Contiene
  • ManualResetEvent.WaitOne () non ritorna se Reset () viene chiamato immediatamente dopo Set ()
  • implementazione pulita quando si passa alle proprietà dei metodi
  • aiuta a convertire l'istruzione SQL in Linq Lambda (hai bisogno di aiuto per gruppo e somma)
  • ritorna al metodo di chiamata - Articoli di coda BlockingCollection
  • ritorna i valori personalizzati dal dialogo WPF