2011-11-21 16 views
13

No estoy seguro de por qué lo siguiente no devuelve un valor para Vend como una cadena. Cuando compruebo por el valor de vend Dice: System.Data.Objects.ObjectQuery``1[System.String]Linq para devolver la cadena

 string vend = (from vnd in db.Vendors 
      where vnd.VendorID == id 
      select vnd.VendorName).ToString(); 

Cuando veo el valor de vend, no es lo que esperaba

+0

¿Está buscando el tipo de vendedor? – zmbq

Respuesta

29

Usted está recibiendo una IQueryable<String> atrás de usted consulta. Es necesario el primer o único o algo:

string vend = (from vnd in db.Vendors 
     where vnd.VendorID == id 
     select vnd.VendorName).First().ToString(); 

El ToString no se necesita si VendorName es una cadena.

string vend = db.Vendors.Single(vnd => vnd.VendorID == id); // more terse 

First se agarra el primer registro del conjunto y se producirá una excepción si el conjunto está vacío.

FirstOrDefault devolverá el primer registro o el predeterminado para el tipo esperado, sin excepción.

Single devolverá el primer registro del conjunto, pero emitirá una excepción si hay más de un registro en el conjunto o si el conjunto está vacío.

SingleOrDefault devolverá el primer registro del conjunto o el valor predeterminado para el tipo si está vacío, pero emitirá una excepción si hay más de un registro en el conjunto.

+0

Siempre me olvido de esto. Gracias por la explicación concisa! – sparkyShorts

5

Está llamando a ToString() en la consulta en sí, no en el resultado de su consulta. Trate

string vend = (from vnd in db.Vendors 
where vnd.VendorID == id 
select vnd.VendorName).First(); 

Esto consigue el primer resultado de la consulta, que ya debería ser una cadena (suponiendo VendorName es una cadena). Por lo tanto, no es necesario llamar a ToString().

Cuestiones relacionadas