Don*_*ald 4 c# linq asp.net-mvc anonymous-types
我试图让下面的方法签名工作.因为这是一个匿名类型我有一些麻烦,任何帮助都会很棒.
当我在QuickWatch窗口中查看sortedGameList.ToList()时,我得到了签名
System.Collections.Generic.List<<>f__AnonymousType0<System.DateTime,System.Linq.IGrouping<System.DateTime,DC.FootballLeague.Web.Models.Game>>>
Run Code Online (Sandbox Code Playgroud)
非常感谢
唐纳德
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();
}
Run Code Online (Sandbox Code Playgroud)
选择新的{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();
}
Run Code Online (Sandbox Code Playgroud)
不,你不需要选择!
您不应该返回匿名实例.
您无法返回匿名类型.
创建一个类型(命名)并返回:
public class GameGroup
{
public DateTime TheDate {get;set;}
public List<Game> TheGames {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
//
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;
}
Run Code Online (Sandbox Code Playgroud)
简单的答案是:不要使用匿名类型。
与该匿名类型最接近的是 IEnumerable<object>。问题是,任何使用您的东西的人都不会知道如何处理类型“不可预测”的对象。
相反,创建一个类,如:
public class GamesWithDate {
public DateTime Date { get; set; }
public List<Game> Games { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
并将您的 LINQ 更改为:
var sortedGameList =
from g in Games
group g by g.Date into s
select new GamesWithDate { Date = s.Key, Games = s };
Run Code Online (Sandbox Code Playgroud)
现在您要返回 List<GamesWithDate>。