2011-11-21 12 views
13

Non sono sicuro del motivo per cui quanto riportato di seguito non restituisce un valore come stringa. Quando controllo per il valore di vend si dice: System.Data.Objects.ObjectQuery``1[System.String]Linq per restituire la stringa

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

Quando osservo il valore di vend, non è quello che mi aspettavo

+0

Stai guardando il tipo di vendita? – zmbq

risposta

29

certi di acquistare una IQueryable<String> indietro da voi ricerca. È necessario il primo o unico o qualcosa del genere:

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

Il ToString non è necessario se VendorName è una stringa.

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

First catturerà il primo record dal set e sarà un'eccezione se l'insieme è vuoto.

FirstOrDefault restituirà il primo record o il valore predefinito per il tipo previsto, nessuna eccezione.

Single restituirà il primo record del set, ma genererà un'eccezione se c'è più di un record nel set o se il set è vuoto.

SingleOrDefault restituirà il primo record del set o il valore predefinito per il tipo se vuoto, ma genererà un'eccezione se ci sono più record nel set.

+0

Lo dimentico sempre. Grazie per la spiegazione concisa! – sparkyShorts

5

Si sta chiamando ToString() sulla query stessa, non sul risultato della query. Prova

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

Questo ottiene il primo risultato della query, che dovrebbe già essere una stringa (supponendo NomeFornitore è una stringa). Pertanto, non è necessario chiamare ToString().

Problemi correlati