2012-10-27 48 views
0

在使用代码的.NET4 MVC 4首先,我有两个类形成多对多的关系。 如何编写一个简单的LINQ查询来查找所有包含至少一个或多个流派的游戏? (即Retreive是战略和/或沙箱体裁的所有游戏)LINQ相交查询使用.NET4的多对多关系MVC4代码优先

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; } 
} 

请注意,我用的代码第一次,所以我必须在该抽象没有访问连接表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'类型的常量值。只有原始类型或枚举类型在此上下文中受支持。

我怎样才能得到我想只使用基元或枚举类型的结果?有没有解决方法?

回答

1

试试这个:

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

GOOD LUCK !!

+0

您提供匹配的游戏ID与类型ID的答案。我试图将任何G.Genre ID与gid中的任何值匹配。 – TryCatch

+0

@TryCatch,我已更新我的答案,看看 –

+0

随着最新的编辑你的代码的作品。 – TryCatch

1

试试这个:

var result = unitOfWork.GameRepository.dbSet 
    .Where(game => game.Genres.Any(genre => gid.Contains(genre.ID)); 
+0

感谢您的建议。不幸的是,你的解决方案会导致完全相同的错误“无法创建类型为'GratifyGaming.Domain.Models.Genre'的常量值,只有原始类型或枚举类型在此上下文中受支持。 – TryCatch