繁体   English   中英

使用linq C#查询多对多关系

[英]Query many-to-many relationship with linq c#

我在两个桌子的游戏和角色之间有多对多的关系。 使用Entity Framework映射表时,未映射代表表关系的表。 目前,我正在尝试使用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>();

            }

        }

    }

如果您有与EntityFramework映射的关系,则无需手动进行连接,EF会为您完成; 假设您在Game上有public List<Role> Roles {get;set;}内容,则在查询时只需要.Include(g => g.Roles) ,则每个Game都会填充其Roles列表。

手动执行联接也可以,但是您可能需要执行GroupJoin。 但是,让框架帮助您实现这一点要容易得多,就像我上面描述的那样。

我有点生锈,所以如果这是不正确的,请忽略此答案。

但这不是您的查询的问题:

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();

是否不返回类型“ Game”的对象列表? 毕竟您正在加入。 我看到您正在尝试通过在Linq表达式中以这种方式命名返回类型“ Game”,但我认为您的期望并不完全。 由于已经将一个类定义为“游戏”,因此这将很有意义。 尤其是由于两个不同的类没有定义相同。 尝试将返回类型拆分为不同的方法,看看这是否不能解决您的问题。

要么生成一个包含所有信息的类,但不需要所有信息。 或为每种情况生成两种不同的方法,因此每种方法都有单独的返回类型……这就是我要做的。

您启用了延迟加载? 如果没有,请尝试启用它。 请注意,使用过的延迟加载可能会影响应用程序性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM