Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 547391
            [titulo] => Nome de arquivo vindos de um txt e arquivos. Há diferença numa comparação?
            [dataCadastro] => DateTime Object
                (
                    [date] => 2016-03-01 22:11:16
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 418027
            [status] => M
            [isExample] => 
            [NomeUsuario] => Jothaz
            [Apelido] => 
            [Foto] => 418027_20150313165406.jpg
            [Conteudo] => Realmente com contains a consulta se perde. 

Eu usaria o Except!

Fiz um exemplo simples abaixo com o uso do Except e do foreach, nos dois casos funciona.

[code]
List<string> diferenca = new List<string>();
List<string> lista = new List<string>();
List<string> listaTXT = new List<string>();

lista.Add("ace0003a.asp");
lista.Add("ace0003b.asp");
lista.Add("ace0003c.asp");

listaTXT.Add("ace0003a.asp");
listaTXT.Add("ace0003c.asp");

foreach (string item in lista)
{
if (!listaTXT.Contains(item))
diferenca.Add(item);
}

List<string> diferenca1 = lista.Except(listaTXT).ToList();
[/code]

Quando tiver um tempo dou um olhada em como fazer com lambda. Mas talvez os exemplos acima resolvam seus problemas. ) )

Nome de arquivo vindos de um txt e arquivos. Há diferença numa comparação?

Pjava
   - 01 mar 2016

Criei uma lista com 13 nomes de arquivos, que extraí usando o GetFileName(). Outra lista eu quebrei um arquivo txt e carreguei esses nomes em outra lista. Então tenho isso:
Citação:

ListaNomeArquivo
ListaNomeTxt

Preciso pegar o nome da lista ListaNomeArquivo e ver se existe dentro de ListaNomeTxt. Tanto Contains quanto Equals, sempre retorna diferente e tenho os mesmos nomes. Só para exemplificar. Tenho em ambas as listas esse nome:
#Código

web\ace\asp\ace0003a.asp

Acontece que a lambda que fiz, diz que são diferentes:
var busca = listaCommiter.Where(l => !l.Contains(listaFarm.ToString()));
Como eu faço para somente armazenar o que realmente não existe?
O código completo dessa rotina:
#Código
private List<string> ComparaArquivo()
        {
            List<string> listaCommiter = new List<string>();
            List<string> listaFarm = new List<string>();
            List<string> listaDiferenca = new List<string>();

            try
            {
                listaCommiter = _listaCommiter();
                listaFarm = _listaFarm();

                var busca = listaCommiter.Where(l => !l.Contains(listaFarm.ToString()));                

                return listaDiferenca;
            }
            catch(Exception ex)
            {
                string r = ex.Message;
                return null;
            }

        }

A lista em return
listaDiferenca; está retornando nada, porque estou ainda desenvolvendo. Ela vai retorna busca.

Post mais votado

Jothaz
   - 01 mar 2016

Realmente com contains a consulta se perde.

Eu usaria o Except!

Fiz um exemplo simples abaixo com o uso do Except e do foreach, nos dois casos funciona.

#Código

           List<string> diferenca = new List<string>();
            List<string> lista = new List<string>();
            List<string> listaTXT = new List<string>();

            lista.Add("ace0003a.asp");
            lista.Add("ace0003b.asp");
            lista.Add("ace0003c.asp");

            listaTXT.Add("ace0003a.asp");
            listaTXT.Add("ace0003c.asp");

            foreach (string item in lista)
            {
                if (!listaTXT.Contains(item))
                    diferenca.Add(item);
            }

            List<string> diferenca1 = lista.Except(listaTXT).ToList();


Quando tiver um tempo dou um olhada em como fazer com lambda. Mas talvez os exemplos acima resolvam seus problemas.

1
|
0

Pjava
   - 02 mar 2016

Cara, bom dia. Da forma que eu fiz não aceita. Dá esse erro:

Citação:

Cannot convert lambda expression to delegate type 'System.Func<string,bool>' because some of the return types in the block are not implicitly convertible to the delegate return type
Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<char>' to 'bool'


Essa foi a forma que eu fiz:
#Código

var busca = listaCommiter.Where(l => l.Except(listaFarm.ToString()));

Pjava
   - 02 mar 2016

Da forma que você fez deu certo. Eu só estava tentando com lambda.

Jothaz
   - 02 mar 2016

Lambda é ótimo e ajuda muito, mas em alguns casos é melhor ser mais pragmático e optar por soluções mais simples.

Neste caso o Foreach funciona e o Except é mais simples e eficaz ainda.