我的数据库Game,Role和Player中有三个表。在游戏和角色之间我有很多关系,在角色和玩家之间。我在游戏和玩家之间也有一对多的关系。我使用Entity Framework来映射我的表。 我想要实现的是让所有玩家都在特定的游戏ID和角色ID下。
public IList<Game> GetGamesRolePlayer(int? gameID, int? roleID)
{
using (DbContextdb = new DbContext())
{
db.Configuration.ProxyCreationEnabled = false;
if (gameID.HasValue && !roleID.HasValue)
{
var query1 = (from g in db.Game.Include(r => r.Role)
where g.ID == gameID
select g).ToList();
_games = query1;
return _games;
}
if (gameID.HasValue && roleID.HasValue)
{
var query2 = (from g in db.Game
from r in db.Role.Include(p => p.Player)
where g.ID == game && r.ID == roleID
select g).ToList();
_games = query2;
return _games;
}
var query = from game in db.Game select game;
_games = query.Include(r => r.Role).ToList();
return _games;
}
}
答案 0 :(得分:0)
我虽然你需要玩家但你的代码却在说另一件事。如果您需要游戏,可以使用导航属性构建以下查询:
using (DbContextdb = new DbContext())
{
db.Configuration.ProxyCreationEnabled = false;
IQueryable<Game> query=db.Game.Include(g=>g.Roles);
if (gameID.HasValue)
query=query.Where(g=>g.ID==gameID.Value)
if (roleID.HasValue)
query=query.Include(g=>g.Roles.Select(r=>r.Players))
.Where(g=>g.Roles.Any(r=>r.ID==roleID.Value))
return query.ToList();
}