2017-04-15 1 views
0

In Linq habe ich ein seltsames Problem. Immer wenn ich versuche, zwei Spalten mit bit datatype in where Klausel anzugeben, gibt es null zurück. Aber die Sache ist, dass Daten mit dieser spezifischen Anforderung in meiner Tabelle existieren.Liste ist null, wenn in where-Klausel mit booleschem Datentyp in Linq nach zwei Bedingungen gesucht wird

Gleiche Abfrage, wenn ich in Form von SQL-Abfrage dann arbeiten und eine Zeile zurückgeben.

select * from KYC_PERSONAL_DETAILS, KYC_UPLOAD_DETAILS 
     where KYC_PERSONAL_DETAILS.FILEFLAG = false 
     AND KYC_UPLOAD_DETAILS.IS_VERIFY= true 

//Here it is returning a row. 

Ich möchte nur wissen, dass es möglich ist, zwei Spalten mit boolean-Datentyp und && Operator zur Angabe in where-Klausel von Linq oder nicht? Wenn ja, dann schlagen Sie bitte einen Weg vor.

+0

Überprüfen Sie, ob Ihre LINQ jeden Datensatz zurückgibt * ohne * die 'where' und' select' Teile. – dotNET

+0

Wenn nicht, könnte das ein Problem mit Datentypen sein, wie aus Ihrer SQL-Anweisung hervorgeht (Sie verwenden String-Werte anstelle von Boolean). – dotNET

+0

Es funktioniert, auch wenn ich Boolean in SQL verwende. – Chirag

Antwort

0

Nach der Test- und Error-Ausführung habe ich einen Weg gefunden, meine LINQ Query zum Laufen zu bringen. Obwohl ich immer noch keinen Grund dafür kenne, funktioniert es jetzt, wenn ich es auf irgendeine Weise mache. Ich werde meine Antwort aktualisieren, nachdem ich über das eigentliche Problem und die dahinter liegende Logik geforscht habe.

Wenn ich die gleiche Abfrage wie

1.

var data = (from PD in C.KYC_PERSONAL_DETAILS 
      join IMG in C.KYC_UPLOAD_DETAILS on PD.ACCOOUNT_NO equals IMG.ACCOOUNT_NO 
      where PD.FILEFLAG == false 
      where IMG.IsVerify == true 
      select new 
      { 
      PD_ACCOUNT_NO = PD.ACCOOUNT_NO, 
      PD_NAME = PD.NAME, 
      IMG_Name = IMG.Name 
      }.ToList(); 
    int count = data.Count(); //Here it shows 1 data that exists in table. 

2.

var data = (from PD in C.KYC_PERSONAL_DETAILS 
      join IMG in C.KYC_UPLOAD_DETAILS on PD.ACCOOUNT_NO equals IMG.ACCOOUNT_NO 
      where (PD.FILEFLAG == false) & (IMG.IsVerify == true) 
      select new 
      { 
      PD_ACCOUNT_NO = PD.ACCOOUNT_NO, 
      PD_NAME = PD.NAME, 
      IMG_Name = IMG.Name 
      }.ToList(); 
    int count = data.Count(); //Here it shows 1 data that exists in table. 

Durch das Schreiben die gleiche Abfrage bei boolean Datentypen es schreiben funktioniert Gut. Ich denke, es könnte ein Problem wegen der Verwendung von Kurzschluss-Betreibern geben.

Also, am Ende entweder mit & statt && oder unter Verwendung von zwei where in LINQ-Abfrage funktioniert gut, wenn Sie mit zwei Spalten mit boolean Datentyp beschäftigen mögen. Die Verwendung von && für andere Datentypen ist in Ordnung, aber im Fall von booleschen Werten könnte dies zu Problemen führen.

UPDATE 1

Als Randbemerkung

Obwohl 2. Option verwendet, ist nicht empfohlen wie in den Kommentaren von Ivan angegeben. Weil ich bin mit SQL SERVER 2008 R2 und Ivan behauptet, dass && in nicht SQL-DB mit feinen funktioniert und es ist auch möglich, dass ich vielleicht einen Fehler in SQL Server werden mit Blick auf ..

Verwandte Themen