2012-06-19 8 views
7

In einer meiner Seiten, die ich überprüfen müssen, ob die eingegebenen Informationen über einen Kunden PAN NO,Email,Mobile No besteht duplizieren, die previously.Currently eingegeben wurden, kann ich es versuche, mit dieser Linq To SQL AnweisungLinq-Abfrage für Duplikat Prüfwerte

var duplicate = (from dup in dt.Data_Customer_Logs 
        where dup.cPanGirNo == panno 
          || dup.cEmail == email 
          || dup.nMobileNo.ToString() == mobno 
    select dup).Any(); 

Es funktioniert, aber kann mir jemand helfen, was ist die richtige Methode, um mein Problem zu lösen.Auch wenn keine Datensätze gefunden werden, was das Ergebnis wäre. Alle Vorschläge sind willkommen.

+1

was genau meinst du mit „es funktioniert nicht“? –

+0

@ ErenErsönmez Ich habe versucht, indem Sie doppelte E-Mail-ID übergeben, aber es führte nicht den "if records found" Teil. – freebird

+0

sollte es funktionieren, aber es könnte Probleme im Zusammenhang mit Groß-/Kleinschreibung/führende/nachstehende Leerzeichen –

Antwort

5
bool duplicateExists = dt.Data_Customer_Logs.Any(x => 
         x.cPanGirNo == panno 
         || x.cEmail == email 
         || x.nMobileNo.ToString() == mobno); 

Dies ist ein bisschen sauberer ist, wenn Sie wollen nur wissen, ob solche Datensätze vorhanden sind oder nicht. Und ich denke, es wird vermeiden, mehrere Datensätze auf die Client-Seite und dann tun IEnumerable<T>.Any auf die Ergebnisse zu bringen.

Wenn Sie müssen auch die Datensätze zurück, die den Kriterien entsprechen, können Sie IQueryable<T>.Where verwenden:

var duplicates = dt.Data_Customer_Logs.Where(x => 
         x.cPanGirNo == panno 
         || x.cEmail == email 
         || x.nMobileNo.ToString() == mobno); 
if(duplicates.Any()) 
{ 
    // use duplicates... 
    foreach(var dup in duplicates) 
    { 
     //use dup.cEmail, dup.nMobileNo, etc. 
+0

Ich habe Lambda-Ausdrücke noch nicht verwendet, könnten Sie mir etwas über die Abfrage erklären, die Sie verwendet haben.Danke für die Hilfe. – freebird

+0

Sicher. Alles in 'Any' ist ein Lambda-Ausdruck. Der Lambda-Ausdruck dient hier als Funktion wie 'bool myFunction (T x)'. Wir müssen den Typ von "x" (T) nicht explizit angeben, dank der Typinferenzfunktion von C#. –

+0

Auch wenn ich Aufzeichnungen finde, wie ich sie bekomme, meine ich, wie man IEnumerable benutzt, um Ergebnisse zu erhalten, ein kleines Beispiel wird gut genug für mich sein. Vielen Dank. – freebird

2

versuchen diese

var duplicate = (from dup in dt.Data_Customer_Logs 
       where dup.cPanGirNo == panno 
         || dup.cEmail == email 
         || dup.nMobileNo.ToString() == mobno 
select dup).FirstOrDefault(); 

if(duplicate != null && duplicate.Any()) 
    //here logic of what should happend if there is something in db 
+0

Ok, also schlägst du vor, dass ich zuerst überprüfe, ob es Null ist oder nicht und dann Any() benutze, kann ich alle gefundenen Datensätze bekommen. Danke. – freebird

+0

sollten Sie zuerst Null überprüfen immer es ist gute Übung zu vermeiden NullReferenceException – harry180

+0

Aber Any() gibt wahr oder falsch, so, wenn es null ist wird es eine Ausnahme werfen.Nicht sicher. – freebird