如何在没有“仅原始类型”错误的情况下表达LINQ to Entities查询

时间:2013-02-08 23:59:45

标签: c# entity-framework exception-handling linq-to-entities

我有一个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));

但这只是没有返回。我到处寻找,但所有事情都涉及事先已知的字符串数组。

那么,如何在没有模型对象的情况下表达这一点呢?

2 个答案:

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