LINQ EM OBJETOS (BINDINGSOURCE)

MRSILVA 11/01/2017 12:49:30
#470603
Olá.
Tenho formulário que os TextBox e um DataGridView está ligados a um bindingSorce esse bindingSorce recebe os dados de uma lista (BindingList<MinhaClasse>). Estou tentando fazer um filtro no dataGridView, mas não consigo implementar, fiz diversas pesquisas onde descobri quando utilizamos coleções (BindingList) tem que ser usado Linq para fazer consultas (filtros) estou tentando fazer uma simples consulta somente para teste no meu programa, mas está retornando o segunte erro (Não é possivel encontrar uma implementação do padrão de consulta para o tipo de origem system.window.forms.bindingsource.....) Alguém poderia me ajudar com algum exemplo ou ajuda como filtrar meu DataGridView, ou seja meu BindingSource e o mesmo continuar vinculados nos meus controles.

Meus códigos:

  //Criação do bindingSorce
BindingSource dados = new BindingSource();
//Recebendo os dados do banco de dados
dados.DataSource = new BindingList<Produto>(produto.todos(codigo));
//DataGridView recebendo os dados do BindingSorce
dgProd.DataSource = dados;

//Realizar um filtro?
dados.DataSource = from prod in dados where prod.Descricao == [Ô]Teste[Ô] select prod;
O erro acontece na palavra dados.

Desde já agradeço a ajuda.

KERPLUNK 11/01/2017 15:42:34
#470609
Resposta escolhida
LINQ não é bem assim que funciona.... para fazer do exato jeito que está querendo(obj.propriedade = List<T>) você deveria usar uma expressão lambda.
MRSILVA 11/01/2017 16:27:16
#470612
Obrigado Kerplunk.

Estou fazendo meu projeto com base nas suas aulas do Youtube já faz alguns dias que estou tentando fazer essa filtragem sem sucesso.

A unica forma de fazer a filtragem é através do Linq? Tentei da forma tradicional não da erro mas também não acontece nada.

Antes de postar a primeira mensagem nas pesquisas que fiz já apontava sobre a expressão lampda, até achei varias coisas na internet sobre isso, mas ainda não consegui fazer. Você tem algum exemplo? Pode ser da internet mais especifico do que preciso para que possa estudar para apreender?

Desde já agradeço.
KERPLUNK 11/01/2017 16:48:41
#470613
Pelo modelo disponível nos vídeos você vai ter que fazer realmente com expressões lambda. Para usar a funcionalidade de query provider do LINQ teria que refazer o projeto. SPOILER: esse projeto em anexo é o tema de uma das aulas adiante. Ele contêm uma implementação do LINQ e já com o conceito de contexto de dados. O banco de dados que ele trabalha é o mesmo que o dos vídeos, uma tabela cliente e uma contatos.
MRSILVA 11/01/2017 18:58:20
#470621
Mais uma vez muito obrigado Kerplunk.

Muito interessante esse modo de programar já comprei três videos cursos de autores diferentes nenhum aborda esse assunto de como podemos usar, estou ansioso pelo novos videos.
Vou estudar os códigos que você passou.
Desculpe por estragar sua surpresa
KERPLUNK 11/01/2017 19:05:52
#470622
Citação:

:
Mais uma vez muito obrigado Kerplunk.

Muito interessante esse modo de programar já comprei três videos cursos de autores diferentes nenhum aborda esse assunto de como podemos usar, estou ansioso pelo novos videos.
Vou estudar os códigos que você passou.
Desculpe por estragar sua surpresa


Eu fico meio sem jeito de dizer que não tenho postado nada ultimamente. é que estou em um projeto pessoal que está me tomando uma boa parte do tempo livre: Entrar em forma! Estou conseguindo excelentes resultados, perdi 17 quilos em 3 meses, corro entre 3 e 4 km TODOS OS DIAS e ainda faço bastante musculação.
Neste exato momento, estou apenas 8 kilos acima do meu peso ideal, mas o prognóstico é ter me livrado deles em pouco mais de um mês! Mas quero postar o vídeos sobre o LINQ o quanto antes, o que aborda esse código que te passei. Ele torna obsoleto todo o projeto que temos feito até então. Muitos vão odiar isso, mas eu já disse bem claramente que o que está sendo feito é somente para aprendizado.
MRSILVA 18/01/2017 00:05:41
#470795
Parabéns Kerplunk pelo resultado em três meses sei como é difícil perder peso por experiência própria, também estou precisando fazer mais exercícios, mas atualmente o tempo que me sobra estou dedicando a estudar programação.

Citação:

Ele torna obsoleto todo o projeto que temos feito até então. Muitos vão odiar isso, mas eu já disse bem claramente que o que está sendo feito é somente para aprendizado.



Eu sou um deles. Rsrsrs....

Estudei seu exemplo, isso acabou me levando a estudar o Entity Framework, fiz um projeto teste e conseguir fazer as filtragens que originou esse poste, percebi que foram gerados muitos códigos automáticos e por isso surgiu outras dúvida que ficaria muito grato se você ou alguém com experiência puder respondê-las.
No seu projeto exemplo você fez tudo manualmente já quando utilizamos o Entity Framework tudo é gerado automaticamente pelo Visual Studio (Classes, Contexto etc). Em um projeto comercial (não para estudo) levando em consideração um projeto de médio porte é utilizado Entity Framework para geração das classes contexto entre outros ou é feito de forma semelhante do seu exemplo? Pergunto isso porque no seu exemplo para mim ficou mais claro as coisas acho que será mais fácil de fazer manutenção e novas implementações.
No meu caso, por exemplo, estou desenvolvendo aos poucos meu projeto caso faça o uso do Entity Framework para geração do meu código será que não vou ter problemas quando fizer novas implementações, ou seja, criação de novas classes entre outros? Em termos de performance existe alguma diferença entre o código gerado automaticamente e os feitos manualmente levando em considerações boas pratica de programação?
Desde já agradeço.
KERPLUNK 18/01/2017 00:42:17
#470796
São várias perguntas com respostas não muito curtas, mas vamos lá:
Em um projeto comercial (não para estudo) levando em consideração um projeto de médio porte é utilizado Entity Framework para geração das classes contexto entre outros ou é feito de forma semelhante do seu exemplo?
é feito exatamente dessa forma. O assistente do Visual Studio, utiliza um modelo(template) de código chamado T4. Você pode alterar esses templates da maneira que quiser se quiser algo mais nas suas classes geradas automaticamente. Mesmo depois de geradas, as classes podem ser alteradas da maneira que quiser, são simplesmente classes da mesma maneira que as classes que foram geradas manualmente nos vídeos. Tenha em mente que se você rodar novamente o assistente, o que você construiu manualmente será substituído, por isso que se você quer alterações que sejam sempre geradas, é melhor que faça isso no template T4.

No meu caso, por exemplo, estou desenvolvendo aos poucos meu projeto caso faça o uso do Entity Framework para geração do meu código será que não vou ter problemas quando fizer novas implementações, ou seja, criação de novas classes entre outros?
é o mesmo caso anterior, você pode rodar o assistente quantas vezes quiser e gerar os código novamente, mas tenha em mente que as alterações construídas manualmente serão sobrescritas.

Em termos de performance existe alguma diferença entre o código gerado automaticamente e os feitos manualmente levando em considerações boas pratica de programação?
O Entity Framework, foi desenvolvido tendo consideração todas as melhores práticas possíveis de serem aplicadas. Veja que seja qual for o caso, o processamento é obrigatório. Se você escrever código manualmente, consultando tabelas e gerando objetos, invariavelmente você terá processamento. O EF foi desenvolvido pensando nisso. é praticamente impossível ter todas as vantagens que o EF oferece sem nenhuma perda de performance. Em outras palavras, o EF é sim um pouco mais lento que se usássemos ADO.NET puramente. Mas a compensação por facilidade de uso e possibilidades que ele disponibiliza compensam. Imagine que você tem uma três tabelas:
Esporte - > Id, Descricao
Time - > Id, Descricao, IdEsporte
Jogador - > Id, Nome, IdTime
Temos aqui três tabelas. Imagine que você queira uma lista de jogadores por esporte. Obviamente você poderia criar todas as classes compatíveis com aquele mesmo modelo de programação que uso nos vídeos, mas convenhamos, seria bastante trabalhoso. Além disso, você quer colocar essa lista de jogadores em um grid editável, onde o usuário possa alterar qualquer coisa à vontade como se estivesse usando o Excel(coisa que usuários ADORAM). Com a metodologia que mostro nos vídeos, isso seria bastante trabalhoso, não impossível, mas bastante trabalhoso mesmo. Com o EF, basta fazer um LINQ e passar para o Grid. Tudo será mostrado, com possibilidade de adição, edição e deleção de dados, sincronizada automaticamente com o banco de dados, mudou, alterou. Todas as operações são passíveis de Log, você tem a opção de uso de Deferred Loading nativamente(sem nenhum código necessário), colunas organizáveis e móveis, filtros automáticos, exportação de dados, tudo prontinho, sem nenhuma linha adicional de código por sua parte. Isso tudo, vai impactar na performance. Mas se você fizesse tudo [Ô]na mão[Ô], não impactaria também? Além da possibilidade muitos(muitos mesmo) exceções e fora o trabalho que você teria se fosse fazer a mesma coisa para 10, 20 ou até 30 tabelas diferentes. Levaria MESES de trabalho, literalmente. Com o EF, você pode fazer isso em questão de MINUTOS e com muito menos possibilidades de exceções e facilidade de manutenção.
NICKOSOFT 18/01/2017 06:11:29
#470797
Mesmo programação sendo um lazer e passa tempo, um dia ainda chego la, nesse padrão, nível de implementação
Por conta propria e seguindo varias fontes, apanhei muito, uma dizia uma coisa, outra era totalmente diferente, ai era por assistente, hora na mao, daqui a pouco assistente novamente perdendo tudo nao saia do lugar
Vou aguardar proximos videos

Pessoal acima do peso, to achando q é mal de viver de programação, eu sou o palito de desentupir agulha kkkkk
MRSILVA 23/02/2017 16:50:42
#471913
Olá.

Demorei um pouco para retornar a esse tópico, más é pelo motivo que refiz meu projeto seguindo as orientações do Kerplunk, estou utilizando Entityframework de modo code first (Não sei bem se isso mesmo), ou seja, criou minhas classes e é depois faço a migração para o banco de dados utilizando um recurso do visual Studio (Package Manager console) esse recurso é fantástico.

Kerplunk no seu projeto de exemplo que você postou você utiliza [Ô]mapping[Ô] para mapear suas entidades eu estou utilizando [Ô]DataAnnotations[Ô] existe alguma diferença entre os dois no quesito performance ou facilidades?
Para quem quer saber mais indico esse explica com detalhes: https://www.youtube.com/watch?v=d3FvOAPVPCo&list=LL0Y6Fuay6SuA4_dhYyrhbow&index=5&t=1449s

Muito obrigado kerplunk pela ajuda.
Tópico encerrado , respostas não são mais permitidas