我在两个表游戏和角色之间有多对多的关系。使用实体框架映射表时,表示表格的表格为'关系没有映射。 目前我正在尝试使用LINQ从数据库中提取特定游戏下的所有游戏角色,但我正在努力使用我的方法的返回类型。
我目前使用我的代码尝试实现的解决方案是否有不同的解决方案?
public List<Game> GetGamesRole(int? gameID)
{
using (DbContext db = new DbContext ())
{
if (!gameID.HasValue && !roleID.HasValue)
{
var query = from game in db.Game select game;
_games = query.ToList();
return _games;
}
else if (gameID.HasValue)
{
var query = db.Game.Join(db.Role, game => game.ID, role => role.ID,
(game, role) => new { Game = game, Role = role }).Where(gameRole => gameRole.Game.ID == gameID).ToList();
_games = query.ToList<Game>();
}
}
}
答案 0 :(得分:0)
如果你有与EntityFramework映射的关系,你不需要手动连接,EF会为你做这件事;假设您在游戏中有类似public List<Role> Roles {get;set;}
的内容,则在查询时只需要.Include(g => g.Roles)
,然后每个游戏都会填充其角色列表。
手动进行连接也可以,但您可能需要进行GroupJoin。但是让框架帮助你更容易,就像我上面所描述的那样。
答案 1 :(得分:0)
我有点生疏,所以如果这不正确,请忽略这个答案。
但问题不在于你的问题:
db.Game.Join(db.Role, game => game.ID, role => role.ID,
(game, role) => new { Game = game, Role = role }).Where(gameRole => gameRole.Game.ID == gameID).ToList();
是不是返回了类型“游戏”对象列表?毕竟你正在加入。 我看到你试图通过在Linq表达式中以这种方式命名它来调用返回类型“Game”,但我认为这并不是你所希望的。 由于一个类已经被定义为“游戏”,这将会成为现实。特别是因为两个不同的类没有定义相同。 尝试将返回类型拆分为不同的方法,看看是否无法解决您的问题。
生成一个包含所有信息的类,但不需要全部信息。或者为每个案例生成两种不同的方法,因此每种方法都有一个单独的返回类型......这就是我要做的。
答案 2 :(得分:0)
您是否启用了延迟加载?如果没有,请尝试启用它。 请注意,使用延迟加载可能会影响应用程序性能。