public void ListagemComItensRepetidosComparecaoComposta()
        {
            IEnumerable <PessoaFisica> pessoas = new List <PessoaFisica>()
            {
                new PessoaFisica()
                {
                    Nome = "Victor Fructuoso", NomeMae = "Ana", CPF = "111.111.111-11"
                },
                new PessoaFisica()
                {
                    Nome = "Victor Fructuoso", NomeMae = "Paula", CPF = "111.111.111-11"
                },
                new PessoaFisica()
                {
                    Nome = "Victor Fructuoso", NomeMae = "Ana", CPF = "222.222.222-22"
                }
            };

            IEnumerable <PessoaFisica> pessoasDiferentes = pessoas.Distinct(GenericComparerFactory <PessoaFisica> .Create(p => new { p.Nome, p.NomeMae }));

            Assert.NotNull(pessoasDiferentes);
            Assert.True(pessoasDiferentes.Any());
            Assert.Equal(2, pessoasDiferentes.Count());
            Assert.DoesNotContain(pessoasDiferentes, p => p.CPF == "222.222.222-22");
        }
 protected override int FindCore(PropertyDescriptor prop, object key)
 {
     if (key is T)
     {
         GenericIComparer <T> comparer = GenericComparerFactory.GetComparer <T>(prop.Name, false);
         for (Int32 index = 0; index < Items.Count; ++index)
         {
             if (comparer.Compare(Items[index], (T)key) == 0)
             {
                 return(index);
             }
         }
         return(-1);
     }
     throw new NotSupportedException("Cannot compare Apple With Orange");
 }
        private void InnerPerformSort()
        {
            if (_currentSortPropertyDescriptor == null)
            {
                return;
            }
            List <T> temp = Items.ToList();

            Items.Clear();
            GenericIComparer <T> cmp = GenericComparerFactory.GetComparer <T>(_currentSortPropertyDescriptor.Name, _currentSortDirection == ListSortDirection.Descending);

            temp.Sort(cmp);
            foreach (T element in temp)
            {
                Items.Add(element);
            }
        }
 public static IEnumerable <TEntity> Distinct <TEntity>(this IEnumerable <TEntity> source, Func <TEntity, object> predicate)
 {
     return(source.Distinct(GenericComparerFactory <TEntity> .Create(predicate)));
 }