使用linq c#

时间:2017-05-05 14:20:02

标签: c# linq many-to-many

我在两个表游戏和角色之间有多对多的关系。使用实体框架映射表时,表示表格的表格为'关系没有映射。 目前我正在尝试使用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>();

            }

        }

    }

3 个答案:

答案 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)

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