2008-10-26 10 views
4

J'essaie d'obtenir la signature sur la méthode ci-dessous pour travailler. Comme c'est un type anonyme, j'ai des problèmes, toute aide serait géniale.Types anonymes dans une signature

Quand je regardais sortedGameList.ToList() dans une fenêtre Espion je reçois la signature

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

Merci beaucoup

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(); 

} 

Répondre

6

select new {Date = s.Key, Jeux = s.ToList()};

Modifier: c'est faux! Je pense que cela va faire.

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

    return sortedGameList.ToList(); 
} 

Et non, vous n'avez pas besoin de sélectionner!

+0

droite Ah, je na pas le tester :) – leppie

+0

En fait, vous ne besoin ... – leppie

+0

de Nice et simple. +1 –

4

La réponse est simple: ne pas utiliser un type anonyme.

Le plus proche que vous allez obtenir avec ce type anonyme est IEnumerable < objet>. Le problème est que quiconque utilise votre matériel ne saura pas quoi faire avec cet objet dont le type est "imprévisible".

Au lieu de cela, faire une classe comme:

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

Et changer votre LINQ à:

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

Liste Maintenant vous retournez < GamesWithDate>.

6

Vous ne devez pas renvoyer d'instances anonymes.

Vous ne pouvez pas retourner les types anonymes.

Faire un type (du nom) et le retour que:

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; 
} 
Questions connexes