2012-10-27 50 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