private IEnumerable <SubFingerprintData> ReadSubFingerprints(int[] hashes, int thresholdVotes, IDictionary <string, string> yesMetaFieldsFilters, IDictionary <string, string> noMetaFieldsFilters, ReadOnlyTransaction tx) { var subFingeprintIds = GetSubFingerprintMatches(hashes, thresholdVotes, tx); var subFingerprints = subFingeprintIds.Select(tx.GetSubFingerprint); if (yesMetaFieldsFilters.Count > 0 || noMetaFieldsFilters.Count > 0) { return(subFingerprints .GroupBy(subFingerprint => subFingerprint.TrackReference) .Where(group => { var trackData = tx.GetTrackByReference(group.Key); var result = metaFieldsFilter.PassesFilters(trackData.MetaFields, yesMetaFieldsFilters, noMetaFieldsFilters); return result; }) .SelectMany(x => x.ToList()) .Select(e => e.ToSubFingerprintData())); } return(subFingerprints .Select(e => e.ToSubFingerprintData())); }
private IEnumerable <SubFingerprintData> ReadSubFingerprints(int[] hashes, int thresholdVotes, IDictionary <string, string> metaFieldsFilter, ReadOnlyTransaction tx) { var subFingeprintIds = GetSubFingerprintMatches(hashes, thresholdVotes, tx); var subFingerprints = subFingeprintIds.Select(tx.GetSubFingerprint); if (metaFieldsFilter.Count > 0) { return(subFingerprints .GroupBy(subFingerprint => subFingerprint.TrackReference) .Where(group => { var trackData = tx.GetTrackByReference(group.Key); return trackData.MetaFields .Join(metaFieldsFilter, x => x.Key, x => x.Key, (a, b) => a.Value.Equals(b.Value)) .Any(x => x); }) .SelectMany(x => x.ToList()) .Select(e => e.ToSubFingerprintData())); } return(subFingerprints .Select(e => e.ToSubFingerprintData())); }