private IEnumerable <string> RemoveDuplicateNames(IEnumerable <string> names) { var comparer = new AccentAndCaseInsensitiveComparer(); var lastNames = names.Select(x => x.GetLastName()).Distinct(comparer); var namesToRemove = new List <string>(); foreach (var ln in lastNames) { var commonLastNames = names.Where(x => x.EndsWithIgnoreAccentsAndCase(ln)); if (commonLastNames.Count() > 1) { var longestLength = commonLastNames.Max(x => x.Length); namesToRemove.AddRange(commonLastNames.Where(x => x.Length < longestLength)); } } namesToRemove.AddRange(names.Where(x => ComposerName.EndsWithIgnoreAccentsAndCase(x))); return(names.Except(namesToRemove));//.ToList(); }
private IEnumerable <string> GetOtherPerformers() { var _names = new List <string>(); foreach (var mf in MusicFiles) { var list = mf.GetPerformers() .Select(x => MusicOptions.ReplaceAlias(x)) .Except(new string[] { MusicOptions.ReplaceAlias(mf.Musician) }, comparer) ; _names.AddRange(list); } //names = names.Distinct(comparer).ToList(); _names = _names.Distinct(comparer).ToList(); var g1 = _names.GroupBy(x => x.GetLastName()); var names = new List <string>(); foreach (var item in g1) { if (!ComposerName.EndsWithIgnoreAccentsAndCase(item.Key)) { names.Add(item.OrderByDescending(x => x.Length).First()); } } names = names //.Distinct(comparer) .OrderBy(x => x.GetLastName()) //.ThenBy(x => x) .ToList(); foreach (var orchestra in orchestras) { names = RemoveName(names, orchestra).ToList(); } foreach (var conductor in conductors) { names = RemoveName(names, conductor).ToList(); } return(names); }