2016-04-21 5 views
3

Ich gebe einem Benutzer Flexibilität durch die Bereitstellung entweder Benutzername oder Benutzer-ID, die verschiedene Datenbankfelder sind, beide Zeichenfolgen. Hier ist meine Linq Abfrage unter:Linq Abfrage und mehrere Where-Klauseln mit OR nur erste Bedingung wird ausgewertet

var usr = ctx.Users.Where(a => (a.Username.Equals(id) || a.UserID.Equals(id))).ToList(); 

Die Sache ist, wenn ich es mit Benutzername nennen: „johndoe“, bekomme ich einen Datensatz zurück, aber wenn ich Benutzer Benutzer-ID: „12345“, dann erhalte ich keine Aufzeichnungen zurück, obwohl es einen Benutzer "johndoe" mit der ID "12345" in der Datenbank gibt.

Auch wenn ich es zu ändern:

var usr = ctx.Users.Where(a => a.UserID.Equals(id)).ToList(); 

Es funktioniert gut mit UserID; "12345". So scheint es, dass nur die erste Bedingung ausgewertet wird. Ich kann nicht herausfinden, was ich falsch mache ...

Nur um Dinge zu verdeutlichen: Ich möchte beide Felder für den angegebenen ID-Wert überprüfen und den Datensatz zurückgeben, bei dem eines der Felder mit der ID übereinstimmt.

Das Endergebnis, das ich erhalten möchte, ist, einen Datensatz (s) in meiner usr-Variablen zurückgegeben werden, unabhängig davon, welches Feld, Benutzername oder UserID der Eingabe-ID entspricht.

+2

Der Benutzername und die Benutzer-ID in Ordnung, werden durch den gleichen Eingang gefüllt ?, z bei Ihrem ersten Zustand Schauen Sie, dass Sie beide Klauseln sind die Überprüfung von ID. Sollte es nicht nach Benutzername und ID sein? – raven

+1

@RobertoDeLaParra Nr. OP sagt, dass sie beide mit dem gleichen Wert überprüfen möchten. – krillgar

+2

Warum ist Ihre ID in der Datenbank eine Zeichenfolge? Bist du sicher, dass es kein 'int' ist? – krillgar

Antwort

-2

Ihre Linq-Abfrage sieht mir

public class Users 
    { 
     public string Username {get;set;} 
     public string Userid {get;set;} 
    } 

void Main() 
{ 
    var users = new List<Users>{new Users {Username="johndoe",Userid="123"}, 
           new Users {Username="stevejobs",Userid="456"} 
           }; 

    var filter = users.Where(a => (a.Username.Equals("123") || a.Userid.Equals("123"))).ToList(); 
    filter.Dump(); 
    var filter2 = users.Where(a => (a.Username.Equals("456") || a.Userid.Equals("456"))).ToList(); 
    filter2.Dump(); 
} 
+1

Ihr Beispiel tut Linq zu Objekten, wo wie das OP scheint mit einem Linq an SQL-Anbieter. Diese können sich sehr unterschiedlich verhalten (obwohl sie das in diesem Fall nicht tun sollten). – juharr

+0

Ich stimme zu, aber dies ist ein Beispiel, nur um zu zeigen, dass die LINQ Abfrage des OP ist richtig und vielleicht OP muss sich auf seine Aufmerksamkeit woanders konzentrieren – cableload

+0

Nein, ich habe nur überprüft - keine Leerzeichen – ElenaDBA