我正在尝试创建一个多对多ViewModel GameGenre的视图,但我不确定如何设计mvc来选择所有游戏并按游戏分组,但显示每个游戏的所有流派。
我正在寻找如何通过LINQ和group-by来实现我的目的,但我找到的大多数答案都是在一个模型中使用它。
此外,我对我现在拥有的视图模型也没有信心:
public class GameStoreViewModel
{
[Key]
public Guid GameId { get;}
public string GameName { get;}
public Genre Genre { get; set; }
public IEnumerable<Genre> GenreList { get; set; }
}以下是我的模型:
public class Game
{
public Guid Id { get; set; }
public string Name { get; set; }
} public class Genre
{
public Guid Id { get; set; }
public string Name { get; set; }
} public class GameGenre
{
public Guid Id { get; set; }
public Guid GameId { get; set; }
public Guid GenreId { get; set; }
public Game Game { get; set; }
public Genre Genre { get; set; }
}在SQL上运行的基本查询是:
SELECT ga.Id, ga.Name, ge.Name FROM Game ga
LEFT JOIN GameGenre gg ON ga.Id = gg.GameId
LEFT JOIN Genre ge ON ge.Id = gg.GenreId;结果

但这会导致游戏被重复多次,这对于前台商店来说看起来并不好。所以,我想让每个游戏都有它的风格,比如

我更关心视图模型和控制器代码,而不是html视图。
抱歉,如果我的解释不清楚,请让我知道。感谢您的帮助,并提前向您致谢!
发布于 2019-11-03 11:17:02
你想要这个?
public class Game
{
public string GameId { get; set; }
public string GenreId { get; set; }
}
var list = new List<Game>{
new Game { GameId = "Final Fantasy VII", GenreId = "RPG" },
new Game { GameId = "Dark Souls", GenreId = "RPG" },
new Game { GameId = "Dark Souls", GenreId = "Action" },
new Game { GameId = "World of Warcraft", GenreId = "MMORPG" },
new Game { GameId = "Resident Evil 2", GenreId = "Survival" },
new Game { GameId = "Resident Evil 2", GenreId = "Horror" }
};
var groupedList = list.GroupBy(
g => g.GameId,
g => g.GenreId,
(key, group) => new
{
GameId = key,
Genres = group.ToList()
})
.ToList();https://stackoverflow.com/questions/58677036
复制相似问题