从LINQ中的子集合中选择一个子项

时间:2017-08-14 13:55:04

标签: linq

在我的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

我现在的工作原理,但我正在对数据库进行两次调用。一个是获得艺术家,另一个是获得歌词。

1 个答案:

答案 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);
}