Guest User

Untitled

a guest
Mar 6th, 2018
292
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.44 KB | None | 0 0
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. List<Person> personList = new List<Person>();
  6.  
  7. personList.Add(new Person { Id = 1, Name = "Julio", Email = "julio@email.com" });
  8. personList.Add(new Person { Id = 2, Name = "Julio Cesar", Email = "julio@email.com" });
  9. personList.Add(new Person { Id = 3, Name = "Cesar", Email = "cesar@email.com" });
  10. personList.Add(new Person { Id = 4, Name = "Julio", Email = "cesar@email.com" });
  11. personList.Add(new Person { Id = 5, Name = "Cesar", Email = "julio@email.com" });
  12. personList.Add(new Person { Id = 6, Name = "Julio Cesar", Email = "cesar@email.com" });
  13.  
  14. Console.WriteLine("Distinct by Name ---------------------------------------------------------------");
  15.  
  16. personList
  17. .Distinct(new GenericComparer<Person>(p => p.Name)) // You can set que property how to compare, but just one per time
  18. .ToList()
  19. .ForEach((person) =>
  20. {
  21. Console.WriteLine($"Id: {person.Id}, Name: {person.Name}, E-mail: {person.Email}, ");
  22. });
  23.  
  24. Console.WriteLine();
  25. Console.WriteLine("Distinct by Email --------------------------------------------------------------");
  26.  
  27. personList
  28. .Distinct(new GenericComparer<Person>(p => p.Email)) // You can set que property how to compare, but just one per time
  29. .ToList()
  30. .ForEach((person) =>
  31. {
  32. Console.WriteLine($"Id: {person.Id}, Name: {person.Name}, E-mail: {person.Email}, ");
  33. });
  34.  
  35. Console.ReadKey();
  36. }
  37. }
  38.  
  39. public class Person
  40. {
  41. public int Id { get; set; }
  42.  
  43. public string Name { get; set; }
  44.  
  45. public string Email { get; set; }
  46. }
  47.  
  48. public sealed class GenericComparer<T> : IEqualityComparer<T> where T : class
  49. {
  50. private Func<T, object> _expression { get; set; }
  51.  
  52. public GenericComparer(Func<T, object> expression)
  53. {
  54. _expression = expression;
  55. }
  56.  
  57. public bool Equals(T x, T y)
  58. {
  59. var first = _expression.Invoke(x);
  60. var sec = _expression.Invoke(y);
  61. return (first != null && first.Equals(sec));
  62. }
  63.  
  64. public int GetHashCode(T obj)
  65. {
  66. return _expression.Invoke(obj).GetHashCode();
  67. }
  68. }
Add Comment
Please, Sign In to add comment