2013-05-02 32 views
7

Tôi có một phương pháp cung cấp cho tôi nhóm người dùng và sau đó tôi muốn nhận tin tức dựa trên GroupID của người dùng.Một chuyển đổi rõ ràng tồn tại (bạn có thiếu một dàn diễn viên không?)

public IEnumerable<News> Getnews(int GroupID) 
{ 
    Expression<Func<News, bool>> constraint = null; 
    constraint = e => e.GroupID.Equals(GroupID); 
    return newsRepository.GetMany(constraint); 

} 

ở đây tôi gọi phương thức trên:

News news = newsService.Getnews(GroupID); 

và đây là lỗi:

thể không mặc nhiên chuyển đổi loại 'System.Collections.Generic.IEnumerable<MeetingBoard.Model.News>' để 'MeetingBoard.Model.News'. Một chuyển đổi rõ ràng tồn tại (được bạn thiếu một dàn diễn viên?)

+2

'IEnumerable ' không phải là 'Tin tức'. – Jodrell

+1

đáng kinh ngạc, tôi không thể tìm thấy một bản sao rõ ràng chính xác. – Jodrell

+0

Tôi nghĩ rằng vấn đề của bạn xuất phát từ thực tế là số ít và số nhiều của "Tin tức" được viết giống nhau. Điều này cũng tương tự đối với một vài danh từ tiếng Anh khác như "Cừu" chẳng hạn. – Jodrell

Trả lời

13

Getnews trả về một tập hợp các mục tin tức, và dòng bạn đang mong đợi một mẩu tin duy nhất.

Bạn có thể thử

News news = newsServices.Getnews(GroupID).FirstOrDefault(); 

hoặc mong đợi một ineumerable

IEnumerable<News> news = newsService.GetNews(GroupID); 
+0

hoặc 'First()', 'Single()' hoặc 'SingleOrDefault()'. – Jodrell

+0

Hoặc chỉ ẩn: var news = newsService.GetNews (GroupID); –

5

Dòng này là thiết lập một biến được định nghĩa là một trường hợp duy nhất của News để một thể hiện của IEnumerable:

News news = newsService.Getnews(GroupID); 

Bạn muốn thay đổi thành

IEnumerable<News> = newsService.Getnews(GroupID); 

Về cơ bản, bạn đang cố gắng đặt một bộ sưu tập Tin tức thành một tham chiếu duy nhất của Tin tức.

4

Getnews trả lại IEnumerable<News> (tức là nhiều tin tức) và bạn đang cố gắng gán nó cho News news (tức là một mục Tin tức). Điều đó không hiệu quả.

Có hai khả năng, tùy thuộc vào việc bạn muốn làm.

Nếu bạn muốn sử dụng tất cả các tin tức, thay đổi News news để IEnumerable<News>:

IEnumerable<News> news = newsService.Getnews(GroupID); 

Nếu bạn muốn sử dụng chỉ một tin duy nhất, sử dụng FirstOrDefault:

News news = newsService.Getnews(GroupID).FirstOrDefault(); 

Tùy thuộc vào những gì bạn mong đợi , bạn cũng có thể sử dụng một trong các tùy chọn sau:

  • First(): Bạn mong đợi Getnews để luôn trả về ít nhất một tin tức. Điều này sẽ ném một ngoại lệ nếu không có tin tức được trả lại.
  • Single(): Bạn mong đợi Getnews để luôn trả lại chính xác một tin tức. Điều này sẽ ném một ngoại lệ nếu nhiều hơn một hoặc không tin tức được trả lại.
  • SingleOrDefault(): Bạn mong đợi không có hoặc một tin tức được trả lại. Điều này sẽ ném một ngoại lệ nếu nhiều hơn một tin tức được trả lại.
4

Đây là những gì bạn muốn

IEnumerable<News> news = newsService.Getnews(GroupID); 

hoặc có thể một cái gì đó như:

News news = newsService.Getnews(GroupID).FirstOrDefault(); 
4

return newsRepository.GetMany(constraint); trả về một IEnumerable<News>, bạn nên làm:

return newsRepository.GetMany(constraint).FirstOrDefault(); 

bù lại News đầu tiên nếu nó là fou số thứ hai trong newRepository, null nếu không

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