我有一个游戏模型,它附带了许多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));
但那只是一无所获。我到处都找过了,但所有的东西都涉及预先已知的字符串数组。
那么,如果没有模型对象,我该如何表达呢?
在Organizer
类中,Games属性应该如下所示:
public virtual ICollection<Game> Games { get; set; }
请参阅此处的原因。
然后你应该能够访问所有的游戏,就像阿巴蒂舍夫在他的回答中所写的那样:
Organizer thisOrganizer = db.Organizers.Single(o => o.ID == 1);
var games = thisOrganizer.Games;
您需要同时声明Games为Organizer的(导航)属性,那么它将只是:
db.Organizers.Single(o => o.ID == 1).Games;