0

在使用 Code First 的 .NET4 MVC 4 中,我有两个类形成多对多关系。如何编写一个简单的 LINQ 查询以从给定的流派列表中查找至少具有一种或多种流派的所有游戏?(即检索所有策略和/或沙盒类型的游戏)

public class Game
{
    public int ID { get; set; }
    public virtual ICollection<Genre> Genres { get; set; }
}

public class Genre
{
    public int ID { get; set; }
    public virtual ICollection<Game> Games { get; set; }
}

请注意,我使用的是 Code First,因此我无法访问抽象连接表 GenreGames。

我尝试了以下方法来从数组 gid 中找到至少包含一个流派 ID 的游戏:

var gid = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var result = from g in unitOfWork.GameRepository.dbSet
             where (
                 from gen in unitOfWork.GenreRepository.dbSet
                 where gid.Contains(gen.ID)
                 select gen.ID
             ).Any()
             select g;

检索结果时

List<Game> similiarGames = result.ToList<Game>();

出现以下错误。

无法创建类型为“GratifyGaming.Domain.Models.Genre”的常量值。此上下文仅支持原始类型或枚举类型。

如何仅使用原始类型或枚举类型获得我想要的结果?有解决方法吗?

4

2 回答 2

1

试试这个:

var test = unitOfWork.GameRepository.dbSet
                         .Where(G => G.Genres.Where(genre => 
                                     gid.Contains(genre .ID)).Count() > 0);

祝你好运 !!

于 2012-10-27T12:15:45.557 回答
1

尝试这个:

var result = unitOfWork.GameRepository.dbSet
    .Where(game => game.Genres.Any(genre => gid.Contains(genre.ID));
于 2012-10-27T12:18:32.420 回答