2013-05-02 13 views
7

Ich habe eine Methode, die mir die Gruppen-ID der Benutzer gibt und dann möchte ich die Nachrichten basierend auf der GroupID des Benutzers erhalten.Eine explizite Konvertierung existiert (fehlt eine Besetzung?)

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

} 

hier nenne ich das obige Verfahren:

News news = newsService.Getnews(GroupID); 

und das ist der Fehler:

nicht implizit Kann Typ 'System.Collections.Generic.IEnumerable<MeetingBoard.Model.News>' zu 'MeetingBoard.Model.News' konvertieren. Eine explizite Konvertierung vorhanden ist (sind Sie fehlt ein gegossenes?)

+2

'IEnumerable ' ist nicht 'Nachrichten'. – Jodrell

+1

Erstaunlicherweise kann ich kein offensichtliches genaues Duplikat finden. – Jodrell

+0

Ich denke, dein Problem rührt von der Tatsache her, dass der Singular und der Plural von "News" gleich geschrieben werden. Dies ist das gleiche für einige andere englische Substantive wie "Sheep" zum Beispiel. – Jodrell

Antwort

13

getNews eine Sammlung von Nachrichten zurückgibt, und Ihre Linie ist eine einzige News erwarten.

könnten Sie versuchen,

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

oder erwarten eine ineumerable

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

oder 'First()', 'Single()' oder 'SingleOrDefault()'. – Jodrell

+0

Oder verstecken Sie es einfach: var news = newsService.GetNews (GroupID); –

5

Diese Linie eine Variable setzt, die als einzige Instanz von Nachrichten zu einer Instanz von IEnumerable definiert:

News news = newsService.Getnews(GroupID); 

Sie möchten zu

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

Im Grunde versuchen Sie, eine Sammlung von Nachrichten zu einer einzigen Referenz von News zu setzen.

4

Getnews gibt eine IEnumerable<News> (d. H. Mehrere News) zurück und Sie versuchen, es News news (d. H. Ein einzelnes News-Element) zuzuweisen. Das funktioniert nicht.

Es gibt zwei Möglichkeiten, je nachdem, was Sie tun möchten.

Wenn Sie alle Nachrichten verwenden möchten, ändern News news zu IEnumerable<News>:

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

Wenn Sie nur eine einzige Nachricht verwenden möchten, verwenden Sie FirstOrDefault:

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

Je nachdem, was Sie erwarten Sie könnten auch einen der folgenden Werte verwenden:

  • First(): Sie erwarten, dass Getnews immer mindestens eine Nachricht zurückgibt. Dies wird eine Ausnahme auslösen, wenn keine Nachrichten zurückgegeben werden.
  • Single(): Sie erwarten, dass Getnews immer genau eine Nachricht zurückgibt. Dies wird eine Ausnahme auslösen, wenn mehr als eine oder null Nachrichten zurückgegeben werden.
  • SingleOrDefault(): Sie erwarten, dass keine oder eine Nachricht zurückgegeben wird. Dies wird eine Ausnahme auslösen, wenn mehr als eine Nachricht zurückgegeben wird.
4

Dies ist, was Sie

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

oder vielleicht etwas wie wünschen:

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

return newsRepository.GetMany(constraint); eine IEnumerable<News> zurückgibt, sollten Sie tun:

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

Rückkehr der erste News wenn es fou ist nd in newRepository, null, sonst

Verwandte Themen