La consulta LINQ no devuelve el resultado deseado como cadena. ¿Por qué?

Mi código:

public string LocName(string locID)
    {
        var name = (from a in idc.Locations
                    where a.ID.ToString() == locID
                    select a.Name).Single();
        return name;   
    }

Lo necesito para devolver el nombre de la Ubicación que coincide con la ID como una cadena para un TextBlock. En cambio, no devuelve elementos, he comprobado que la ID es correcta, por lo que debería devolver al menos un elemento.

También he intentado:

where a.ID == new Guid(locID)

al igual que

.First()
.FirstOrDefault()

he intentado devolver el resultado como un elemento y el enlace de datos a eso, pero aún así, no hay elementos.

¿Cuál es el error ???

preguntado el 22 de mayo de 12 a las 09:05

¿Contiene idc.Locations algún resultado? -

prueba donde a.ID.Contains(locID) -

utilice String.Equals(row.Name, "test", StringComparison.OrdinalIgnoreCase) para operaciones de igualdad que no distinguen entre mayúsculas y minúsculas. -

Single() arrojaría una excepción si su resultado arrojara menos o más de un registro. First() también lanzaría una excepción si no hubiera filas. Entonces, ¿cuál es el código que probaste y cuál fue el resultado exacto? -

Compruebe la sensibilidad de mayúsculas y minúsculas. Generalmente evito comparar cadenas usando ==. -

2 Respuestas

Debe ser un problema de carcasa si los datos están ahí, siempre debe usar ToUpper() ya que está optimizado para verificaciones de igualdad de cadenas.

Además, siempre debes usar FirstOrDefault as Single lanzará una excepción si hay más de una coincidencia y First lanzará una excepción si no hay coincidencias. Tratar:

EDITAR: también he añadido Trim en el valor ingresado para desinfectar los espacios. También he agregado un cheque nulo en el locID El parámetro, ya que explotaría si se pasara, es nulo. Por último, agregué un ?? (unirse) en el return declaración en caso de que devuelva nulo y esté realizando otras cosas en esa cadena (como Trim or ToLowerCase) ya que eso daría lugar a una excepción.

public string LocName(string locID)
{
    if (locID == null) return string.Empty;

    var name = (from a in idc.Locations
                where a.ID.ToString().Trim().ToUpper() == locID.Trim().ToUpper()
                select a.Name).FirstOrDefault();

    return name ?? string.Empty;   
}

contestado el 22 de mayo de 12 a las 10:05

Mismo punto aquí; si hubiera un espacio en blanco, supongo (donde a.ID == new Guid(locID)) evitaría lo que estás hablando, ¿verdad? - Isa Qandil

@IssaQandil Revisa mi edición, he agregado un Trim para ignorar el espacio en blanco en el valor ingresado. Esto estaría bien si el locID era un GUID, pero no creo que ese sea el caso aquí? No estoy seguro :) - mattytommo

Si usara Trim, lo pondría en el otro lado :) - Isa Qandil

@IssaQandil Sí, buen punto, ¡es mejor estar súper seguro! Editado eso para incluir gracias :) - mattytommo

@xhedgepigx No hay problema, me alegro de haber podido ayudar :) - mattytommo

Bueno, en primer lugar Single() lanzará una excepción si hay más de una coincidencia con la consulta. aconsejo usar FirstOrDefault() si está esperando más de una respuesta.

También intentaría usar Trim() y ToUpper() para deshacerse de los espacios en blanco/problemas de mayúsculas y minúsculas que podrían estar impidiendo que las cadenas coincidan.

contestado el 22 de mayo de 12 a las 10:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.