linqtoエンティティで動作するWhereIn句を取得しようとしていますが、問題が発生しました。私の問題は、さまざまなエンティティのリストがいくつかあることです。これらのリストからゲームエンティティのセットを選択して、基本的にSQLWHEREIN句を設定します。問題は、エンティティのリストが、多対多の関係を持つゲームエンティティの関連エンティティと比較されていることです。私は多くの研究を行い、これを解決するためにたくさんの解決策を試しましたが、それを完全に正しくすることはできません。stackoverflowコミュニティからの助けを本当に感謝します。
前もって感謝します。
編集:
私は組合の代わりにこれをやってみました:
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;
ユニオンとこれの両方で、次のエラーメッセージが表示されます。
base {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;
}