none
concatenação select em linq RRS feed

  • Pergunta

  • no select normal posso fazer uma concatenação tipo isso :

    select codigo,nome + "-" + codigo as nome from tabela

    Como faço isso em linq tem como fui fazer e deu erro.


    Junior
    terça-feira, 18 de outubro de 2011 14:38

Respostas

  • Diego sua sintaxe está errada, na lista tem que ter um select e no datasource ele não reconhece o em.

     


    Junior

    Tem razão, copiei o exemplo de cima e esqueci de alterar... foi malz..

    Corrigindo:

    var lista = (from em in db.Tb_Base_Empresa where em.FLSite == "S" && em.flinativ == "A").ToList();
    
    Ddl_Empresas.DataSource = (from item in lista select new { item.cdempr, nomeempr = item.cdempr + "-" + item.nmabre }  );
    


    • Marcado como Resposta Junior_luiz terça-feira, 18 de outubro de 2011 17:42
    terça-feira, 18 de outubro de 2011 17:21

Todas as Respostas

  • Junior, segue um exemplo:

     

            struct Teste
            {
                public int Codigo { get; set; }
                public string Nome { get; set; }
            }
    
            static void Main(string[] args)
            {
                List<Teste> testes = new List<Teste>();
                testes.Add(new Teste() { Codigo = 1, Nome = "A" });
                testes.Add(new Teste() { Codigo = 2, Nome = "B" });
                testes.Add(new Teste() { Codigo = 3, Nome = "C" });
                testes.Add(new Teste() { Codigo = 4, Nome = "D" });
                testes.Add(new Teste() { Codigo = 5, Nome = "E" });
    
                var query = testes.Select(t => new { t.Codigo, t.Nome, CodigoNome = t.Codigo + t.Nome });
                foreach (var item in query)
                    Console.WriteLine("{0} {1} {2}", item.Codigo, item.Nome,  item.CodigoNome);
    
                Console.ReadKey();
            }
    


     

    terça-feira, 18 de outubro de 2011 15:02
  • Diego fiz como vc em enviou mais dá erro de conversão, esse result vou dar um bind em um dropdownlist fiz assim :

    Ddl_Empresas.DataSource = from em in db.Tb_Base_Empresa where em.FLSite == "S" && em.flinativ == "A" select new { em.cdempr , nomeempr = em.cdempr  + "-" + em.nmabre };
    


    Junior
    terça-feira, 18 de outubro de 2011 15:23
  • Tente transformar o seu retorno em uma Lista:

    Ddl_Empresas.DataSource = (from em in db.Tb_Base_Empresa
                                           where em.FLSite == "S" && em.flinativ == "A"
                                           select new { em.cdempr, nomeempr = em.cdempr + "-" + em.nmabre }).ToList();
    
    


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/
    terça-feira, 18 de outubro de 2011 15:30
  • Vitor dá esse erro :

    "Unable to cast the type 'System.Int32' to type 'System.Object'. LINQ to Entities only supports casting Entity Data Model primitive types."

    Na realidade no select convencional eu faço assim :

    select cdempr,convert(varchar,cdempr) + ' - ' + nmabre as nome.

     


    Junior
    terça-feira, 18 de outubro de 2011 16:05
  • Estranho, fiz aqui e deu certo... tem algum "cdempr" ou "nambre" nulo? Talvez seja isso...
    terça-feira, 18 de outubro de 2011 16:10
  • Diego na estrutura do banco cdempr é chave primária e nmabre é varchar(50) a tabela é pequena e não tem nenhum registro nulo


    Junior
    terça-feira, 18 de outubro de 2011 16:25
  • Tenta assim então:

    var lista = (from em in db.Tb_Base_Empresa where em.FLSite == "S" && em.flinativ == "A").ToList();
    
    Ddl_Empresas.DataSource = (from item in lista select new { em.cdempr, nomeempr = em.cdempr + "-" + em.nmabre }  );
    
    É bizarro mas acho que é um pau do EF. Ao invés de ToList() pode usar AsEnumerable() na primeira linha.

    terça-feira, 18 de outubro de 2011 16:28
  • Diego sua sintaxe está errada, na lista tem que ter um select e no datasource ele não reconhece o em.

     


    Junior
    terça-feira, 18 de outubro de 2011 17:00
  • Diego sua sintaxe está errada, na lista tem que ter um select e no datasource ele não reconhece o em.

     


    Junior

    Tem razão, copiei o exemplo de cima e esqueci de alterar... foi malz..

    Corrigindo:

    var lista = (from em in db.Tb_Base_Empresa where em.FLSite == "S" && em.flinativ == "A").ToList();
    
    Ddl_Empresas.DataSource = (from item in lista select new { item.cdempr, nomeempr = item.cdempr + "-" + item.nmabre }  );
    


    • Marcado como Resposta Junior_luiz terça-feira, 18 de outubro de 2011 17:42
    terça-feira, 18 de outubro de 2011 17:21
  • Junior você esta atribuindo corretamente as propriedades do DropDownList, eu até pensei que a criação de um tipo anonimo implicaria, fiz o teste e deu certo:

    .aspx
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication3._Default" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:DropDownList ID="ddlCidades" runat="server">
            </asp:DropDownList>
        </div>
        </form>
    </body>
    </html>
    
    



    .cs
    using System;
    using System.Linq;
    using System.Collections.Generic;
    
    namespace WebApplication3
    {
        public partial class _Default : System.Web.UI.Page
        {
            public class DDD
            {
                public string Cidade { get; set; }
                public string Sigla { get; set; }
                public int DDDCidade { get; set; }
            }
    
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    List<DDD> listaDeCidades = new List<DDD>()
                    {
                        new DDD{Cidade="ADAMANTINA",Sigla="SP",DDDCidade=18},
                        new DDD{Cidade="ADOLFO",Sigla="SP",DDDCidade=17},
                        new DDD{Cidade="AGUAÍ",Sigla="SP",DDDCidade=19},
                        new DDD{Cidade="AGUDOS",Sigla="SP",DDDCidade=14},
                        new DDD{Cidade="ALAMBARI",Sigla="SP",DDDCidade=15}
                    };
    
                    ddlCidades.DataSource = (from c in listaDeCidades
                                             select new { CidadeSigla = c.Cidade + " - " + c.Sigla, c.DDDCidade }).ToList();
    
                    ddlCidades.DataTextField = "CidadeSigla";
                    ddlCidades.DataValueField = "DDDCidade";
                    ddlCidades.DataBind();
                }
            }
        }
    }
    

     
    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/
    terça-feira, 18 de outubro de 2011 17:35
  • diego finalmente deu certo. muitissimo obrigado.


    Junior
    terça-feira, 18 de outubro de 2011 17:40
  • Show!!!!

    Fica aqui pra registro um Link que explica mais ou menos o motivo do erro:

    CLR Method to Canonical Function Mapping

    terça-feira, 18 de outubro de 2011 17:45