2011-11-04 60 views

Respuesta

20

No se puede comparar un Guid a una cadena directamente. O convierte la cadena a un Guid o Guid a una cadena.

La conversión de un Guid a una cadena es tan fácil como llamar al .ToString() en la variable, pero es importante saber que hay más de una forma de formatear el Guid. Ya sea con o sin guiones:.

someguid.ToString() le dará algo así como B06A6881-003B-4183-A8AB-39B51809F196 someGuid.ToString("N") devolverá algo como B06A6881003B4183A8AB39B51809F196

Si decide convertir C.CustomerId a una cadena de asegurarse de que sabe qué formato customerProfileId está en

Si puede ser cualquier formato, es mejor que convierta customerProfileId en un guid: new Guid(customerProfileId).

La desventaja de esto es que la conversión de cadena a Guid lanzará una excepción si no está formateada correctamente. Por lo tanto, si obtuvo el customerProfileId de la entrada del usuario (como un campo de formulario o una URL) debe validarlo primero.

Sin embargo, si extrae la conversión a Guid fuera de su consulta, probablemente obtendrá un mejor rendimiento ya que la comparación de las guías es probablemente más rápida que la comparación de las cadenas.

var customerProfileGuid = new Guid(customerProfileId); 
// wrap in try catch if needed 

var accountQuery = from C in CustomerModel.CustomerProfile 
        where C.CustomerId == customerProfileGuid      
        select C; 
3

Eso es porque no se puede equiparar un Guid y una cadena.

Así que primero necesita convertir el Guid en una cadena. Normalmente me gustaría sugerir:

where C.CustomerId.ToString().Equals(customerProfileId) 

pero ToString() no existe en LINQ a Entidades.

La respuesta a esta pregunta - Problem getting GUID string value in Linq-To-Entity query - probablemente sea útil.

+2

Esto no funciona en L2E: 'LINQ a Entidades no reconoce el método 'System.String ToString()' método, y este método no se puede traducir en una expresión de tienda. –

0

Cambiar a:

var accountQuery = from C in CustomerModel.CustomerProfile 
        where C.CustomerId.ToString() == customerProfileId     
       select C; 

o analizar su customerProfileId a un GUID y el uso que en la consulta.

1

Debe convertir CustomerId a cuerda (llamando .ToString()) o customerProfileId a Guid (llamando Guid.Parse()) y luego compararlos.

0

¿Y cuál es la pregunta?

Obviamente, uno de los valores es Guid mientras que otro es una cadena. Puede intentar comparar de alguna manera como este:

C.CustomerId == new Guid (customerProfileId) teniendo C.CustomerId es un Guid.

0

¿Puede usted hacer un C.CustomerId.toString() == customerProfileId o reemplazar customerProfileId con el nuevo GUID (customerProfileId)

El segundo debe ser más rápido como su único conversión y compara GUID son más rápidos que la cadena se compara .

0
var accountQuery = from C in CustomerModel.CustomerProfile 
       where C.CustomerId == new Guid(customerProfileId) // Error here      
      select C; 

que necesita para generar nuevos GUID de la cadena y debería funcionar

Cuestiones relacionadas