2011-11-21 81 views
13

我不確定爲什麼以下不會爲Vend返回值作爲字符串。 當我檢查鬻的價值,它說:System.Data.Objects.ObjectQuery``1[System.String]Linq返回字符串

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

當我查看鬻的價值,這是不是我所期待

+0

你在看vend的類型嗎? – zmbq

回答

29

您購買的IQueryable<String>回從您查詢。你需要第一頁或單或東西:

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

ToString是不需要如果VendorName是一個字符串。

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

First將抓取集合中的第一條記錄,如果集合爲空則會拋出異常。

FirstOrDefault會返回第一條記錄或預期類型的​​默認值,沒有例外。

Single將返回該集合的第一條記錄,但是如果集合中有多條記錄或集合爲空,則會拋出異常。

SingleOrDefault將返回該集合的第一條記錄或該類型的默認值(如果爲空),但如果該集合中有多條記錄,則會拋出異常。

+0

我總是忘記這一點。感謝您的簡潔解釋! – sparkyShorts

5

您在查詢本身上調用ToString(),而不是查詢的結果。嘗試

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

這會得到查詢的第一個結果,它應該已經是一個字符串(假定VendorName是一個字符串)。因此,不需要調用ToString()。