using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; namespace NzbDrone.Common { public static class EnumerableExtensions { public static IEnumerable SelectDistinct(this IEnumerable outer, Func outerKeySelector) { return outer.Select(outerKeySelector).Distinct(); } public static IEnumerable Join(this IEnumerable outer, IEnumerable inner, Func outerKeySelector, Func innerKeySelector, Expression> outerProperty) { var outerList = outer.ToList(); var innerList = inner.ToList(); foreach (var outerElement in outerList) { var outerKey = outerKeySelector(outerElement); foreach (var innerElement in innerList) { var innerKey = innerKeySelector(innerElement); if (innerKey.Equals(outerKey)) { var prop = (PropertyInfo)((MemberExpression)outerProperty.Body).Member; prop.SetValue(outerElement, innerElement, null); } } } return outerList; } } }