我正在尝试选择由几位歌手创作的歌曲。
这些是我的桌子:
Artist
-----------------------------
(id,nickName)
Song
-----------------------------
(id,name,photoPath)
Artist
和Song
有着多对多的关系
我可以这样操作:
var songs = ctx.song
.Where(s => s.artist.Any(a => a.nickName == "jack") && s.artist.Any(a => a.nickName == "sara"))
.ToList()
但是,我认为在EF中选择3位或更多歌手的歌曲不是最好的方法。我该如何编写此代码?
答案 0 :(得分:1)
您可以像这样检查艺术家集合:
var artists = new [] { "jack", "sara", "bob" };
var songs = ctx.song
.Where(s => artists
.All(a => s.artist
.Any(x => x.nickname == a)))
.ToList();
答案 1 :(得分:0)
我假设s.artist
是Artist
对象的列表。如果我是对的,并且只需要具有多个歌手的歌曲,则可以使用Count
属性:
var songs = ctx.song.Where(s => s.artist.Count > 1).ToList();