在我的LyricRepository.cs
上,我有以下方法:
public Lyric GetLyric(string artistSlug, string lyricSlug)
{
var artist = _context.Artists.FirstOrDefault(a => a.Slug == artistSlug);
if (artist == null) return null;
if (artist.Lyrics.Any(l => l.Slug == lyricSlug))
{
return _context.Lyrics.FirstOrDefault(l => l.Slug == lyricSlug);
}
return null;
}
艺术家和歌词有一对多的关系:
一个艺术家有很多歌词
当我收到artist
时,如何才能返回与lyirc
匹配的lyricSlug
?
我现在的工作原理,但我正在对数据库进行两次调用。一个是获得艺术家,另一个是获得歌词。
答案 0 :(得分:2)
像你一样使用FirstOrDefault
:
public Lyric GetLyric(string artistSlug, string lyricSlug)
{
var artist = _context.Artists.FirstOrDefault(a => a.Slug == artistSlug);
return artist!=null?artist.Lyrics.FirstOrDefault(l => l.Slug == lyricSlug):null;
}
现在,为了改进您的查询,您可以在以下条件之一中使用导航属性执行以下操作:
public Lyric GetLyric(string artistSlug, string lyricSlug)
{
return _context.Lyrics.FirstOrDefault(a => a.Slug==lyricSlug
&& a.Artist.Slug == artistSlug);
}