2016-08-17 2 views
0

Ich bin neu in Dapper, so kann ich etwas offensichtlich fehlen, aber ich verstehe nicht, warum diese Abfrage null zurückgibt, obwohl der Datensatz in der Tabelle vorhanden ist.Überprüfen, ob Datensatz existiert mit Dapper ORM

queryResult = db.Query<dynamic>(@"SELECT Id FROM Customer WHERE CustomerId = @CustomerId", 
       new { CustomerId = theCustomerId }).FirstOrDefault(); 

Ich bin Überprüfung, ob der Datensatz vorhanden ist, und in diesem Fall, um zu sehen null es tut, noch queryresult ist immer. Der @CustomerId Parameter ist ein string, dass ich genau bin passend ..

Wenn ich die SQL in SQL Server ausführen, wird der Datensatz kein Problem bringt ...

SELECT Id FROM Customer WHERE CustomerId = 'abc123' 

wo abc123 die CustomerId

Antwort

1
ist

es gibt null zurück, wie Sie es so machen wollen

nach Sie ist r Abfrage ausgeführt zu werden, als Teil des Query API

"SELECT Id FROM Customer WHERE CustomerId = @CustomerId", 
       new { CustomerId = theCustomerId } 

Nun, was passiert, wenn CustomerId nicht übereinstimmt, erzeugt es leer IEnumerable<dynamic>, obwohl sein eine andere Geschichte, warum dynamic, so sollen sie integerId vorausgesetzt verwenden eine ganze Zahl

aber was FirstOrDefault() macht auf einen leeren IEnumerable zu finden, kehrt null, so einfach wie Any entfernen sie überprüfen, adrett nicht standardmäßig null zurückkehrt, Ihren Code zwingt es

+0

Ich bin ein wenig verwirrt in Bezug auf Ihre Antwort. Wenn der Datensatz existiert, würde ich erwarten, dass "FirstOrDefault" den Datensatz und Null zurückgibt, wenn er nicht existiert. Ich sehe nicht, wie ich die Rückkehr von Null erzwinge. – webworm

+0

Als Experiment können Sie bitte 'FirstorDefault()' entfernen und stattdessen überprüfen, ob 'Any()' Call True zurückgibt, wenn es dann richtig ist, wenn Nicht dann bin ich richtig. Die Idee bleibt adrett, erzwingt keine Null in ihrem Ergebnis, sie wird höchstens eine leere Sammlung geben –

+0

Ich tat, wie Sie vorgeschlagen haben, wenn "queryResult" ausgeführt wird, wird nun "false". Ich denke, ich sehe was du sagst. 'FirstOrDefault' gibt eine leere Sammlung statt" null "zurück. Dennoch hätte ich erwartet, dass 'queryResult'' true' zurückgibt, wenn der Datensatz existiert. – webworm

Verwandte Themen