2013-05-02 11 views
7

Ho un metodo che mi dà il groupID degli utenti e quindi voglio ottenere le notizie in base al GroupID dell'utente.Esiste una conversione esplicita (ti manca un cast?)

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

} 

qui io chiamo il metodo di cui sopra:

News news = newsService.Getnews(GroupID); 

e questo è l'errore:

Impossibile convertire implicitamente il tipo 'System.Collections.Generic.IEnumerable<MeetingBoard.Model.News>' a 'MeetingBoard.Model.News'. Esiste una conversione esplicita (stai manca un cast?)

+2

'IEnumerable ' non è 'Notizie'. – Jodrell

+1

incredibilmente, non riesco a trovare un duplicato esatto ovvio. – Jodrell

+0

Penso che il tuo problema derivi dal fatto che il singolare e il plurale di "News" sono scritti allo stesso modo. Questo è lo stesso per alcuni altri nomi inglesi come "Pecora" per esempio. – Jodrell

risposta

13

Getnews restituisce un insieme di notizie, e la vostra linea è in attesa di una singola notizia.

Si potrebbe provare

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

o si aspettano un ineumerable

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

o 'Primo()', 'Singolo()' o 'SingoloOrDefault()'. – Jodrell

+0

O semplicemente nascondilo: var news = newsService.GetNews (GroupID); –

5

questa linea è impostare una variabile che è definita come una singola istanza di News a un'istanza di IEnumerable:

News news = newsService.Getnews(GroupID); 

Volete passare a

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

Fondamentalmente si sta tentando di impostare una raccolta di notizie su un singolo riferimento di notizie.

4

Getnews restituisce un IEnumerable<News> (ad esempio più notizie) e si sta tentando di assegnarlo a News news (vale a dire una singola voce di notizie). Questo non funziona.

Ci sono due possibilità, a seconda di cosa si vuole fare.

Se si desidera utilizzare tutte le notizie, cambiare News news a IEnumerable<News>:

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

Se si desidera utilizzare una sola notizia, utilizzare FirstOrDefault:

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

A seconda di quello che ci si aspetta , è inoltre possibile utilizzare uno dei seguenti:

  • First(): Si aspetta Getnews per restituire sempre almeno una notizia. Questo genererà un'eccezione se non viene restituita alcuna notizia.
  • Single(): Si aspetta che Getnews restituisca sempre esattamente una notizia. Questo genererà un'eccezione se vengono restituite più di una o zero notizie.
  • SingleOrDefault(): ci si aspetta zero o una notizia da restituire. Questo genererà un'eccezione se vengono restituite più notizie.
4

Questo è ciò che si vuole

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

o forse qualcosa di simile:

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

return newsRepository.GetMany(constraint); restituisce un IEnumerable<News>, si dovrebbe fare:

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

ritorno il primo News se è fou nd in newRepository, null altrimenti

Problemi correlati