2

多くのオーガナイザーモデルがアタッチされたゲームモデルがあります。これが私のモデルです:

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

ゲームもオーガナイザーの(ナビゲーション)プロパティとして宣言する必要があります。そうすると、次のようになります。

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