2

我有一个 Game 模型,上面附有许多 Organizer 模型。这是我的模型:

public class Organizer
{
    public int ID { get; set; }
    public string Name { get; set; }
    public List<Game> Games {get; set; }
}

public class Game
{
    public int ID { get; set; }
    public string Name { get; set;}
    public List<Organizer> Organizers { get; set; }
}

我正在尝试获取所有包含特定组织者的游戏。例如,我可能有一些这样的数据:

Game
ID    Name
--    ----
1     Soccer
2     Baseball

Organizer
ID    Name
--    ----
1     John
2     Barry

GameOrganizer
GameID    OrganizerID
------    -----------
1         1
2         1

这是我尝试使用的代码:

Organizer thisOrganizer = db.Organizers.Single(o => o.ID == 1);

var gamesQuery = db.Games
    .Where(game => game.Organizers.Contains(thisOrganizer))
    .Select(g => new { ID = g.ID, Name = g.Name });

这给了我一个错误:

在此上下文中仅支持原始类型。

我明白这意味着什么,但我不知道如何以不同的方式表达它。我最接近的是:

var gamesQuery = db.Games
    .Where(game => game.Organizers
        .Any(gO => gO.ID == 1));

但这只是没有回报。我到处寻找,但一切都处理事先已经知道的字符串数组。

那么,如果没有模型对象,我该如何表达呢?

4

2 回答 2

2

在您的Organizer课程中,您的 Games 属性应如下所示:

public virtual ICollection<Game> Games { get; set; }

看看这里为什么。

然后,您应该能够像 abatishchev 在他的回答中所写的那样访问所有游戏:

Organizer thisOrganizer = db.Organizers.Single(o => o.ID == 1);
var games = thisOrganizer.Games;
于 2013-02-09T00:32:17.767 回答
1

您还需要将 Games 声明为 Organizer 的(导航)属性,那么它将是:

db.Organizers.Single(o => o.ID == 1).Games;
于 2013-02-09T00:15:30.103 回答