none
Simples Dúvida - MVC RRS feed

  • Pergunta

  • [[ controler ]]

    public ActionResult Index()
            {
                using (BancoDados db = new BancoDados())
                {
                    var retorno = (from x in db.TB_USUARIO
                                  select new
                                  { 
                                      x.ID,
                                      x.NOME 
                                  }).ToList();

                    return View(retorno);
                }
            }

    [[ views ]]

    <br />
    @foreach (var x in Model)
    {
         @(x.ID) <br /> @(x.NOME)
    }

    ////////////////////////////////

    Tenho sempre que tipar o linq?

    Tipo (  select new CLASSE {} )


    >>------------------------------------------>>
    LINQ -> Uma das 7 maravilhas da informática.

    quarta-feira, 18 de abril de 2012 13:51

Todas as Respostas

  • Não necessariamente, você usa SELECT NEW para retornar da lista os valores específicos do objeto, que no seu caso são ID e NOME. Caso haja mais valores no objetos ele não serão retornados.

    Você pode retornar o objeto inteiro simplesmente assim:

     using (BancoDados db = new BancoDados())
                {
                    var retorno = db.TB_USUARIO.ToList();
    
                    return View(retorno);
                }

    quarta-feira, 18 de abril de 2012 15:07
  • Não necessariamente, você usa SELECT NEW para retornar da lista os valores específicos do objeto, que no seu caso são ID e NOME. Caso haja mais valores no objetos ele não serão retornados.

    Você pode retornar o objeto inteiro simplesmente assim:

     using (BancoDados db = new BancoDados())
                {
                    var retorno = db.TB_USUARIO.ToList();
    
                    return View(retorno);
                }

    Luiz,

    Desta forma que passou esta ok, funciona.
    Mas passei um exemplo simples de select.

    Minha situação é que tenho consultadas que faço com inner join e outras bem mais complexas.

    No caso para cada consulta teria que tipar o retorno..
    Gostaria de algo mais "generico"


    >>------------------------------------------>>
    LINQ -> Uma das 7 maravilhas da informática.

    quarta-feira, 18 de abril de 2012 15:16
  • Olá.

    É simples, basta no final da consulta LINQ em vez de você fazer:

    select new { ....

    faça assim:

    from x in tabela

    select x;


    Pedro Henrique B. Fernandes
    MCPD - Web Developer 4
    Site: pedrofernandes.net

    quarta-feira, 18 de abril de 2012 16:49
  • Olá.

    É simples, basta no final da consulta LINQ em vez de você fazer:

    select new { ....

    faça assim:

    from x in tabela

    select x;


    Pedro Henrique B. Fernandes
    MCPD - Web Developer 4
    Site: pedrofernandes.net

    Então Pedro é a mesma resposta que passei para o Luiz acima.

    Consideramos a seguinte consulta abaixo, como proceder?

    var retorno = (from x in db.TB_USUARIO

                                  select new
                                  { 
                                      x.ID,
                                      x.NOME ,
                                      qtdAcessos = x.TB_ACESSOS.where(dt => dt.DATA_ACESSO < DateTime.Now).Count(distinct)
                                  }).ToList();


    >>------------------------------------------>>
    LINQ -> Uma das 7 maravilhas da informática.



    • Editado KNascimento quarta-feira, 18 de abril de 2012 17:40
    quarta-feira, 18 de abril de 2012 17:15
  • Amigos? Nothing ??


    >>------------------------------------------>>
    LINQ -> Uma das 7 maravilhas da informática.

    quinta-feira, 19 de abril de 2012 13:35
  • Dexter,

    Qual é a sua dúvida exatamente?

    Logo no primeiro post vocês está utilizando objetos anônimos, sem utilizar nenhuma classe.

    Não é isto que você pretende?

    Abraços,
    Caio Proiete



    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://caioproiete.net
    sexta-feira, 20 de abril de 2012 00:31
    Moderador
  • Dexter,

    Qual é a sua dúvida exatamente?

    Logo no primeiro post vocês está utilizando objetos anônimos, sem utilizar nenhuma classe.

    Não é isto que você pretende?

    Abraços,
    Caio Proiete



    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://caioproiete.net

    Sim Caio. Quero retornar uma busca com objetos anônimos para a view.

    Ex: select new { valor, valor }


    >>------------------------------------------>>
    LINQ -> Uma das 7 maravilhas da informática.

    sexta-feira, 20 de abril de 2012 13:22
  • Sim Caio. Quero retornar uma busca com objetos anônimos para a view.

    Ex: select new { valor, valor }

    :)

    Então continuo sem entender... Você já está retornando objetos anônimos para a View.

    Qual é a sua dúvida?


    Abraços,
    Caio Proiete



    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://caioproiete.net
    sexta-feira, 20 de abril de 2012 13:53
    Moderador
  • Sim Caio. Quero retornar uma busca com objetos anônimos para a view.

    Ex: select new { valor, valor }

    :)

    Então continuo sem entender... Você já está retornando objetos anônimos para a View.

    Qual é a sua dúvida?


    Abraços,
    Caio Proiete



    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://caioproiete.net

    A dúvida é como utiliza-los na view

    Se não estou tipando o select a view não reconhece as propriedades dentro do foreach.
    Como no exemplo abaixo, a view não reconhece o campo1 e campo2.

    Exemplo:

    [ na controler ]

    var dados = from x in tabela select new { campo1, campo2 }; // SELEÇÃO NÃO TIPADA
    retorn View(dados);

    [ na view ]

    @foreach (var x in Model)
    {
         @(x.campo1) <br /> @(x.campo2); // EXIBIÇÃO DOS CAMPOS
    }

    ========================




    >>------------------------------------------>>
    LINQ -> Uma das 7 maravilhas da informática.


    • Editado KNascimento sexta-feira, 20 de abril de 2012 15:39
    sexta-feira, 20 de abril de 2012 15:37
  • Olá,

    Se estiver utilizando ASP .NET MVC 3, utilize um ExpandoObject para criar o modelo de dados que pretende usar na View, e declare o Model como sendo dynamic para poder acessar todos os membros do Model.

    Como é natural, você não vai ter intellisense na View (porque é tudo dinâmico), mas vai funcionar como você quer...

    Controller:

    public ActionResult Index()
    {
        dynamic model = new ExpandoObject();
        model.Nome = "Dexter";
        model.Forum = "MSDN";
    
        return View(model);
    }
    

    View:

    @model dynamic
    
    <p>Nome: @Model.Nome</p>
    <p>Forum: @Model.Forum</p>


    Abraços,
    Caio Proiete



    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://caioproiete.net
    sexta-feira, 20 de abril de 2012 17:23
    Moderador