none
Distinct com Lambda RRS feed

  • Pergunta

  • Uso VS2010, aspnet4, c#

    Como colocar um distinct(lambda) nesta consulta quero que venha apenas os bairros distintos

    string param = "centro";
            if (param != null)
            {
                IList<Endereco> enderecos = acaoEndereco.ObterTodosPor(e => e.Bairro.Contains(param), new Expression<Func<Endereco, object>>[] { e => e.Bairro });
                foreach (var endereco in enderecos)
                {
                    context.Response.Write(endereco.Bairro + Environment.NewLine);
                }
    • Movido Roberson Ferreira _ segunda-feira, 17 de setembro de 2012 13:14 (De:SQL Server - Desenvolvimento Geral)
    segunda-feira, 17 de setembro de 2012 13:07

Respostas

  • Como sua questão é mais da linguagem de programação do que propriamente do SQL Server, vou mudar sua Thread de fórum, pois acredito que lhe será mais útil.

    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta Álvaro Luiz quarta-feira, 19 de setembro de 2012 17:45
    segunda-feira, 17 de setembro de 2012 13:13
  • Boa_Vida existe de duas técnicas que talvez lhe ajude. Uma delas consite em agrupar seus itens pela propriedade que lhe interessa e logo em seguida selecionar apenas a primeira dos agrupado:

    suaFonte.GroupBy(x => x.Bairro).Select(x => x.First());

    A outra técnica mais elegante levantada por Jon Skeet consite em criar um extesion método onde o mesmo tem por resposabilidade fazer o Distinct da sua fonte de dados de acordo com a propriedade apontada por você:

    public static IEnumerable<TSource> DistinctBy<TSource, TKey>
         (this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
    {
        HashSet<TKey> knownKeys = new HashSet<TKey>();
        foreach (TSource element in source)
        {
            if (knownKeys.Add(keySelector(element)))
            {
                yield return element;
            }
        }
    }
    

    O código abaixo mostra como utiliza-la:
    suaFonte.DistinctBy(c => c.Bairro);
    

    Referencia:
    http://stackoverflow.com/questions/1300088/distinct-with-lambda


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    • Marcado como Resposta Álvaro Luiz quarta-feira, 19 de setembro de 2012 17:45
    segunda-feira, 17 de setembro de 2012 13:23
  • E ae tuco, blz cara?

    Veja se estes exemplos ajudam no seu problema:

    http://csharp-guide.blogspot.com.br/2012/05/linq-to-sql-select-distinct-values.html

    http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

    http://programminglinq.com/blogs/marcorusso/archive/2008/07/20/use-of-distinct-and-orderby-in-linq.aspx


    Se a resposta foi útil por favor qualifique! Janderson Candido de Mattos - MCTS

    • Marcado como Resposta Álvaro Luiz quarta-feira, 19 de setembro de 2012 17:45
    segunda-feira, 17 de setembro de 2012 13:30

Todas as Respostas

  • Como sua questão é mais da linguagem de programação do que propriamente do SQL Server, vou mudar sua Thread de fórum, pois acredito que lhe será mais útil.

    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta Álvaro Luiz quarta-feira, 19 de setembro de 2012 17:45
    segunda-feira, 17 de setembro de 2012 13:13
  • Boa_Vida existe de duas técnicas que talvez lhe ajude. Uma delas consite em agrupar seus itens pela propriedade que lhe interessa e logo em seguida selecionar apenas a primeira dos agrupado:

    suaFonte.GroupBy(x => x.Bairro).Select(x => x.First());

    A outra técnica mais elegante levantada por Jon Skeet consite em criar um extesion método onde o mesmo tem por resposabilidade fazer o Distinct da sua fonte de dados de acordo com a propriedade apontada por você:

    public static IEnumerable<TSource> DistinctBy<TSource, TKey>
         (this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
    {
        HashSet<TKey> knownKeys = new HashSet<TKey>();
        foreach (TSource element in source)
        {
            if (knownKeys.Add(keySelector(element)))
            {
                yield return element;
            }
        }
    }
    

    O código abaixo mostra como utiliza-la:
    suaFonte.DistinctBy(c => c.Bairro);
    

    Referencia:
    http://stackoverflow.com/questions/1300088/distinct-with-lambda


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    • Marcado como Resposta Álvaro Luiz quarta-feira, 19 de setembro de 2012 17:45
    segunda-feira, 17 de setembro de 2012 13:23
  • E ae tuco, blz cara?

    Veja se estes exemplos ajudam no seu problema:

    http://csharp-guide.blogspot.com.br/2012/05/linq-to-sql-select-distinct-values.html

    http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

    http://programminglinq.com/blogs/marcorusso/archive/2008/07/20/use-of-distinct-and-orderby-in-linq.aspx


    Se a resposta foi útil por favor qualifique! Janderson Candido de Mattos - MCTS

    • Marcado como Resposta Álvaro Luiz quarta-feira, 19 de setembro de 2012 17:45
    segunda-feira, 17 de setembro de 2012 13:30