2011-11-21 28 views
13

Tôi không chắc lý do tại sao sau đây không trả lại giá trị cho Bán dưới dạng chuỗi. Khi tôi kiểm tra giá trị của bán những món hàng rẻ tiền nó nói: System.Data.Objects.ObjectQuery``1[System.String]LINQ để trả về chuỗi

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

Khi tôi xem giá trị của bán những món hàng rẻ tiền, nó không phải là những gì tôi mong đợi

+0

Bạn đang tìm kiếm loại thù lao? – zmbq

Trả lời

29

Bạn đang nhận được một IQueryable<String> lại từ bạn truy vấn. Bạn cần một trong hai đầu tiên hoặc đơn hoặc một cái gì đó:

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

Các ToString không cần nếu VendorName là một String.

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

First sẽ lấy bản ghi đầu tiên từ bộ này và sẽ ném ngoại lệ nếu bộ trống.

FirstOrDefault sẽ trả lại bản ghi đầu tiên hoặc mặc định cho loại được mong đợi, không ngoại lệ.

Single sẽ trả lại bản ghi đầu tiên của bộ này, nhưng sẽ ném ngoại lệ nếu có nhiều bản ghi trong bộ hoặc nếu bộ trống.

SingleOrDefault sẽ trả về bản ghi đầu tiên của bộ hoặc mặc định cho loại nếu trống, nhưng sẽ ném một ngoại lệ nếu có nhiều bản ghi trong tập hợp.

+0

Tôi luôn quên điều này. Cảm ơn lời giải thích ngắn gọn! – sparkyShorts

5

Bạn đang gọi ToString() trên chính truy vấn, không phải trên kết quả truy vấn của bạn. Hãy thử

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

Đây là kết quả đầu tiên của truy vấn, đã là chuỗi (giả sử Tên người bán là một chuỗi). Vì vậy, không cần phải gọi ToString().

Các vấn đề liên quan