Анонимные типы в подписи
-
04-07-2019 - |
Вопрос
Я пытаюсь заставить подпись к приведенному ниже методу работать.Поскольку это Анонимный тип, у меня возникли некоторые проблемы, любая помощь была бы большой.
Когда я посмотрел на sortedGameList.ToList() в окне быстрого просмотра я получаю подпись
System.Collections.Generic.List<<>f__AnonymousType0<System.DateTime,System.Linq.IGrouping<System.DateTime,DC.FootballLeague.Web.Models.Game>>>
Большое спасибо
Дональд
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();
}
Решение
выберите новый { Date = s.Key, Games = s.ToList() };
Редактировать:это неправильно!Я думаю, этого хватит.
public List<IGrouping<DateTime, Game>> getGamesList(int leagueID)
{
var sortedGameList =
from g in Games
group g by g.Date;
return sortedGameList.ToList();
}
И нет, вам не нужен select!
Другие советы
Вы не должны возвращать анонимные экземпляры.
Вы не можете возвращать анонимные типы.
Создайте тип (с именем) и верните это:
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;
}
Простой ответ таков:не используйте анонимный тип.
Самое близкое, что вы получите с этим анонимным типом, - это IEnumerable<object>.Проблема в том, что любой, кто использует ваши материалы, не будет знать, что делать с этим объектом, тип которого был "непредсказуемым".
Вместо этого создайте класс, подобный:
public class GamesWithDate {
public DateTime Date { get; set; }
public List<Game> Games { get; set; }
}
И измените свой LINQ на:
var sortedGameList =
from g in Games
group g by g.Date into s
select new GamesWithDate { Date = s.Key, Games = s };
Теперь вы возвращаете Список<GamesWithDate>.