5 Stimmen

Anonyme Typen in einer Signatur

Ich versuche, die Signatur der folgenden Methode zum Funktionieren zu bringen. Da dies ein anonymer Typ ist, habe ich einige Probleme, jede Hilfe wäre großartig.

Wenn ich mir sortedGameList.ToList() in einem QuickWatch-Fenster ansehe, erhalte ich die Signatur

System.Collections.Generic.List<<>f__AnonymousType0<System.DateTime,System.Linq.IGrouping<System.DateTime,DC.FootballLeague.Web.Models.Game>>>

Vielen Dank

Donald

   public List<IGrouping<DateTime, Game>> getGamesList(int leagueID)
{
    var sortedGameList =
        from g in Games
        group g by g.Date into s
        select new { Date = s.Key, Games = s };

    return sortedGameList.ToList();

}

7voto

Amy B Punkte 104656

Sie sollten keine anonymen Instanzen zurückgeben.

Sie können keine anonymen Typen zurückgeben.

Erstellen Sie einen Typ (named) und geben Sie diesen zurück:

public class GameGroup
{
  public DateTime TheDate {get;set;}
  public List<Game> TheGames {get;set;}
}

//

public List<GameGroup> getGamesGroups(int leagueID)
{
  List<GameGroup> sortedGameList =
    Games
    .GroupBy(game => game.Date)
    .OrderBy(g => g.Key)
    .Select(g => new GameGroup(){TheDate = g.Key, TheGames = g.ToList()})
    .ToList();

  return sortedGameList;
}

6voto

Brad Wilson Punkte 64944

Die einfache Antwort lautet: Verwenden Sie keinen anonymen Typ.

Am ehesten kommt man mit diesem anonymen Typ IEnumerable<object> zurecht. Das Problem ist, dass jeder, der Ihr Material verwendet, nicht weiß, was er mit dem Objekt tun soll, dessen Typ "unvorhersehbar" war.

Machen Sie stattdessen eine Klasse wie:

public class GamesWithDate {
    public DateTime Date { get; set; }
    public List<Game> Games { get; set; }
}

Und ändern Sie Ihre LINQ zu:

var sortedGameList =
    from g in Games
    group g by g.Date into s
    select new GamesWithDate { Date = s.Key, Games = s };

Jetzt geben Sie List<GamesWithDate> zurück.

6voto

leppie Punkte 111830

select new { Datum = s.Key, Spiele = s.ToList() };

Edit: Das ist falsch! Ich denke, das wird reichen.

public List<IGrouping<DateTime, Game>> getGamesList(int leagueID)
{
    var sortedGameList =
        from g in Games
        group g by g.Date;

    return sortedGameList.ToList();
}

Und nein, Sie brauchen den Select nicht!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X