LinqExtension.cs 1022 B

123456789101112131415161718192021222324252627
  1. namespace ServiceCenter.Extensions
  2. {
  3. /// <summary>
  4. /// Linq 扩展
  5. /// </summary>
  6. public static class LinqExtension
  7. {
  8. /// <summary>
  9. /// 根据指定的属性返回集合中的非重复元素
  10. /// </summary>
  11. /// <remarks>不明白本方法是如何实现去重的</remarks>
  12. /// <typeparam name="TSource">数据源的类型</typeparam>
  13. /// <typeparam name="TKey">数据源需要进行筛选的属性</typeparam>
  14. /// <param name="source">数据源</param>
  15. /// <param name="keySelector">指定属性的函数表达式</param>
  16. /// <returns></returns>
  17. public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
  18. {
  19. var seenKeys = new HashSet<TKey>();
  20. foreach (var source1 in source)
  21. {
  22. if (seenKeys.Add(keySelector(source1)))
  23. yield return source1;
  24. }
  25. }
  26. }
  27. }