我有一个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));
但这只是没有返回。我到处寻找,但所有事情都涉及事先已知的字符串数组。
那么,如何在没有模型对象的情况下表达这一点呢?
答案 0 :(得分:2)
在您的Organizer
课程中,您的游戏属性应如下所示:
public virtual ICollection<Game> Games { get; set; }
请参阅here原因。
然后你应该能够访问所有像abatishchev在他的回答中所写的游戏:
Organizer thisOrganizer = db.Organizers.Single(o => o.ID == 1);
var games = thisOrganizer.Games;
答案 1 :(得分:1)
您还需要将组织者的游戏声明为(导航)属性,然后它将只是:
db.Organizers.Single(o => o.ID == 1).Games;