2011-11-21 9 views
13

Nie jestem pewien, dlaczego poniższe wartości nie zwracają wartości Vend jako ciągu. Kiedy sprawdzać wartości Vend mówi: System.Data.Objects.ObjectQuery``1[System.String]Linq do zwracania ciągu znaków

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

Kiedy przeglądam wartość Vend, to nie jest to, czego się spodziewałem

+0

Czy patrzysz na typ dostawcy? – zmbq

Odpowiedz

29

Ty otrzymujesz IQueryable<String> powrotem z kwerendy. Musisz albo pierwszy lub pojedynczy lub coś:

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

ToString nie jest potrzebne jeśli VendorName jest String.

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

First złapie pierwszy rekord z zestawu i rzuci wyjątek, jeśli zestaw jest pusty.

FirstOrDefault zwróci pierwszy rekord lub ustawienie domyślne dla oczekiwanego typu, bez wyjątków.

Single zwróci pierwszy rekord zestawu, ale wygeneruje wyjątek, jeśli w zestawie jest więcej niż jeden rekord lub zestaw jest pusty.

SingleOrDefault zwróci pierwszy rekord zestawu lub domyślny typ, jeśli jest pusty, ale zwróci wyjątek, jeśli w zestawie znajduje się więcej niż jeden rekord.

+0

Zawsze o tym zapominam. Dzięki za zwięzłe wyjaśnienie! – sparkyShorts

5

Wywołujesz ToString() na samym zapytaniu, a nie na wyniku zapytania. Wypróbuj

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

Otrzymuje pierwszy wynik zapytania, który powinien już być ciągiem (zakładając, że nazwa_sprzedawcy jest ciągiem znaków). Tak więc nie ma potrzeby wywoływania ToString().

Powiązane problemy