BeatsMusic.Importer.CollectionImporter.FindBestMatch C# (CSharp) Метод

FindBestMatch() приватный Метод

private FindBestMatch ( ServiceAgnosticAlbum album, List albumSearchResults ) : SearchResult
album ServiceAgnosticAlbum
albumSearchResults List
Результат BeatsMusic.Importer.Beats.SearchResult
        private SearchResult FindBestMatch(ServiceAgnosticAlbum album, List<SearchResult> albumSearchResults)
        {
            if (albumSearchResults == null || !albumSearchResults.Any())
                return null;

            // first try to match based on identical artist and album name
            var directMatch = albumSearchResults.Where(sr =>
                sr.DisplayText.ToLower() == album.AlbumName.ToLower()
                && sr.DetailText.ToLower() == album.ArtistName.ToLower());

            if (directMatch.Count() == 1)
                return directMatch.First();
            else if (directMatch.Count() > 1)
                albumSearchResults = directMatch.ToList();

            // next try to match just based on artist name
            var artistMatch = albumSearchResults.Where(sr => 
                sr.DetailText.ToLower() == album.ArtistName.ToLower());

            if (artistMatch.Count() == 1)
                return artistMatch.First();
            else if (artistMatch.Count() > 1)
                albumSearchResults = artistMatch.ToList();

            // next we'll try to zero down on textually similar artist and albums
            return albumSearchResults
                .Where(sr => 
                textComparisonAlgo.GetSimilarity(sr.DisplayText, album.AlbumName) +
                textComparisonAlgo.GetSimilarity(sr.DetailText, album.ArtistName) > 1)
                .OrderByDescending(sr =>
                textComparisonAlgo.GetSimilarity(sr.DisplayText, album.AlbumName) +
                textComparisonAlgo.GetSimilarity(sr.DetailText, album.ArtistName))
                .FirstOrDefault();

        }