2012-06-19 26 views
7

En una de mis páginas que necesito para comprobar si la información introducida sobre un cliente consiste en duplicar PAN NO,Email,Mobile No que puede haber sido introducida previously.Currently Estoy tratando de que el uso de esta declaración Linq To SQLconsulta LINQ para comprobar si hay valores duplicados

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

Está funcionando, pero ¿alguien puede ayudarme con cuál es el método correcto para resolver mi problema? También, si no se encuentran registros, ¿cuál sería el resultado? Cualquier sugerencia es bienvenida.

+1

lo que es exactamente lo que quiere decir con "no funciona"? –

+0

@ ErenErsönmez Lo intenté al pasar una identificación de correo electrónico duplicada pero no ejecuté la parte "si se encontraron registros". – freebird

+0

debería funcionar, pero podría haber problemas relacionados con el caso o los espacios iniciales/finales –

Respuesta

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

Esto es un poco más limpio si lo que desea saber si existen o no tales registros. Y creo que evitará traer múltiples registros al lado del cliente y luego haciendo IEnumerable<T>.Any en los resultados.

Si necesita también recuperar los registros que coinciden con los criterios, puede utilizar IQueryable<T>.Where:

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

No he usado expresiones lambda antes, ¿podría explicarme un poco sobre la consulta que utilizó?Gracias por la ayuda. – freebird

+0

Claro. Todo en 'Any' es una expresión lambda. La expresión lambda aquí sirve como una función como 'bool myFunction (T x)'. No tenemos que especificar explícitamente el tipo de 'x' (T) gracias a la función de inferencia de tipo de C#. –

+0

También, si encuentro registros, cómo los obtengo, me refiero a cómo usar IEnumerable para obtener resultados; un pequeño ejemplo será lo suficientemente bueno para mí. Muchas gracias. – freebird

2

probar esto

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, entonces me sugiere que verifique primero si es nulo o no y luego uso Cualquiera(), puedo obtener todos los registros encontrados. Gracias. – freebird

+0

debe comprobar primero null siempre es una buena práctica para evitar NullReferenceException – harry180

+0

pero Any() devuelve verdadero o falso, por lo que si es nulo arrojará una excepción. No estoy seguro. – freebird

Cuestiones relacionadas