Tengo una tabla de base de datos llamada Clientes. Ejecuto el siguiente sql para obtener información sobre el primer y segundo cliente:

select FirstCustomerName, SecondCustomerName, 
* from Customers where FirstCustomerName = SecondCustomerName

Cuando ejecuto esto en sql, me da lo que quiero, por lo que uno está bien. El problema es cuando quiero hacer lo mismo en Linq en C #.

Para lograr lo mismo con Linq, he intentado esto (todavía "no funciona"):

   InfoAboutBothCustomers = c.customers.FirstCustomerName == c.customers.SecondCustomerName.ToString()

Nota: InfoAboutBothCustomers es un int en mi ViewModel

Entonces, mi pregunta básicamente es ¿cómo hacer lo mismo en LINQ?

0
Lidprogsky 9 jul. 2021 a las 11:40

3 respuestas

La mejor respuesta

No estoy seguro de qué valor desea en InfoAboutBothCustomers. Su declaración SQL devuelve dos valores y está diciendo que quiere un int. c.customers.FirstCustomerName == c.customers.SecondCustomerName.ToString() devolverá un booleano para decir si son iguales o no.

Si desea el ID o los ID que coincidan con sus criterios, intente algo como:

var ids = from cust in customers
          where cust.FirstCustomerName == cust.SecondCustomerName
          select cust.Id;

Alternativamente, puede usar lo que se menciona en las otras respuestas, que es más limpio, pero tenga en cuenta que FirstOrDefault devolverá la fila de datos. Luego puede especificar la columna que desea haciendo algo como esto FirstOrDefault().Id;

1
spmoolman 9 jul. 2021 a las 08:58

Usar la operación .Where

InfoAboutBothCustomers = c.customers.Where(c => c.FirstCustomerName == c.SecondCustomerName).FirstOrDefault();
1
H.Sarxha 9 jul. 2021 a las 08:45

Sin muestra, es difícil proporcionar una solución. Pero puedes probar esto

InfoAboutBothCustomers = c.customers.Where(x=>x.FirstCustomerName == x.SecondCustomerName).FirstOrDefault()

En caso de error / problema, comparta la muestra.

1
Amit Verma 9 jul. 2021 a las 08:45