我想獲得一個Where In子句與linq一起工作並遇到問題。我的問題是我有幾個實體的列表,我想從這些列表中選擇一組遊戲實體,基本上爲它們設置了一個SQL WHERE IN子句。問題在於實體列表正在與具有多對多關係的遊戲實體的相關實體進行比較。我已經做了大量的研究,並嘗試了一堆解決方案來解決這個問題,但不能完全正確,我真的很感謝來自於stackoverflow社區的一些幫助。Linq到實體在哪裏在子句多對多
在此先感謝。
編輯:
我已經試過這樣做,而不是工會:
var relatedGames = from game in ugdb.Games
where game.Developers.Any(d => relatedDevelopers.Any(r => r.DeveloperID == d.DeveloperID))
|| game.Publishers.Any(d => relatedPublishers.Any(r => r.PublisherID == d.PublisherID))
|| game.Genres.Any(d => relatedGenres.Any(r => r.GenreID == d.GenreID))
select game;
同時與工會和這個我收到以下錯誤信息:
基地{} System.SystemException = {「無法創建類型爲'UltimateGameDB.Domain.Entities.Developer'的常量值。在此上下文中僅支持基本類型(如Int32,String和Guid)。」}
沒有人有任何想法如何去這樣做沒有
我當前的代碼:
public IQueryable<Video> GetSimilarVideos(Guid videoId)
{
IQueryable<Video> result = null;
List<Video> similarVideoList = null;
Video currentVideo = ugdb.Videos.Find(videoId);
List<Genre> relatedGenres = new List<Genre>();
List<Developer> relatedDevelopers = new List<Developer>();
List<Publisher> relatedPublishers = new List<Publisher>();
foreach (var game in currentVideo.Games)
{
relatedDevelopers.AddRange(game.Developers);
relatedPublishers.AddRange(game.Publishers);
relatedGenres.AddRange(game.Genres);
}
relatedDevelopers = relatedDevelopers.Distinct().ToList<Developer>();
relatedPublishers = relatedPublishers.Distinct().ToList<Publisher>();
relatedGenres = relatedGenres.Distinct().ToList<Genre>();
//This is the piece I am having trouble with!
var relatedGames = from game in ugdb.Games
where game.Developers.Union(relatedDevelopers).Count() > 0
|| game.Genres.Union(relatedGenres).Count() > 0
|| game.Publishers.Union(relatedPublishers).Count() > 0
select game;
foreach (var game in relatedGames)
{
similarVideoList.AddRange(game.Videos.Where(v => v.VideoType.Equals(currentVideo.VideoType)));
}
result = similarVideoList.Distinct().AsQueryable<Video>();
return result;
}
什麼是你的業務規則?爲什麼你需要使用'Union'? –
我不需要使用聯盟,我只需要能夠獲得具有位於relatedDevelopers,relatedPublishers或relatedGenres列表之一中的開發人員,發佈者或流派的所有遊戲。 –