none
usar linq para excluir RRS feed

  • Pergunta

  • eu tenho um linqdatasource

            <asp:LinqDataSource 
                ContextTypeName="basedados" 
                TableName="tabela" 
                ID="LinqDataSource1" 
                runat="server">
            </asp:LinqDataSource>   

    queria saber como posso fazer um delete em uma tabela minha usando o linq.
    sexta-feira, 22 de março de 2013 17:01

Respostas

  • qdo vc tras singleordefault vc tras o primeiro registro, vc não esta trazendo todos vc tem que colocar tolist e fazer um for para ele ir deletando todos, faz como te passei o ultimo, esta ai abaixo.

    using (var entities = new Entity())
       {                               
           foreach (Item item in entities.Items.Where(x => x.id == id))
                  entities.DeleteObject(item);
           entities.SaveChanges();
       }


    Junior

    • Marcado como Resposta rafa-martin sexta-feira, 22 de março de 2013 19:21
    sexta-feira, 22 de março de 2013 18:58

Todas as Respostas

  • se vc quer excluir um registro com linq vc faz a consulta do registro e então deleta

    faz assim

    var deleteOrderDetails =
        from details in db.OrderDetails
        where details.OrderID == 11000
        select details;
    
    foreach (var detail in deleteOrderDetails)
    {
        db.OrderDetails.DeleteOnSubmit(detail);
    }
                            
    try
    {
        db.SubmitChanges();
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
        // Provide for exceptions.
    }
    


    Junior

    sexta-feira, 22 de março de 2013 17:09
  • então mais quando quando eu faço db.noma da minha tabela não aparece a opção DeleteOnSubmit. pq?

    basedados db =
                        new basedados();

                    //var toyProducts = from p in db.tabela
                    //                  select p;

                    var deleteOrderDetails =
                        from details in db.tabela
                        select details;

                    foreach (var detail in deleteOrderDetails)
                    {
                        db.tabela.DeleteOnSubmit(detail);
                    }

                    try
                    {
                        db.SubmitChanges();
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e);
                        // Provide for exceptions.
                    }

    sexta-feira, 22 de março de 2013 17:19
  • se a consulta resulta só em um registro faz assim

    db.suatabela.delete(deleteobjectdetails);


    Junior

    sexta-feira, 22 de março de 2013 17:22
  • então na minha consulta não tem where pq eu quero fazer um delete nela inteira.

    e quando eu faço db.minhatabela na lista não aparece a opção delete, também. pq?

    sexta-feira, 22 de março de 2013 17:28
  • entao na sua consulta faz assim na sua consulta

    var consulta = (fromu inentidade.sua tabela where1 == 1 selectu).tollist();


    Junior

    sexta-feira, 22 de março de 2013 17:34
  • não esta funcionando
    sexta-feira, 22 de março de 2013 17:38
  • tenta assim :

    var consulta = (from p in entidade.POS_POSTO select p).ToList();

    if (consulta.count > 0)

    {

         faz um for deletando os registros;

    }


    Junior

    sexta-feira, 22 de março de 2013 17:44
  • uma dúvida: algumas tabelas minhas não são listadas quando faço db.aqui seria a tabela.

    pq?

    todas estão na minha base e estão com o usuario dbo.


    sexta-feira, 22 de março de 2013 17:47
  • então grande problema é que não está aparecendo a opção de DeleteOnSubmit. e não sei pq.
    sexta-feira, 22 de março de 2013 17:49
  • rafa vc não entendeu o db é o nome do entity que vc deu no meu caso é assim
    BilheteUnicoEntities entidade = new BilheteUnicoEntities();

    ou vc esta fazendo em linqtosql ?

    Junior

    sexta-feira, 22 de março de 2013 17:52
  • sim eu sei. mais está me dizendo que para o DeleteOnsubmit não tem referencia.

    e eu já coloquei todas, veja:

    using System.Linq;

    using System.Data.Linq;

    sexta-feira, 22 de março de 2013 17:55
  • olha aqui outro exemplo

    public static void DeleteCustomer(string customerID)
        {
            NorthWindDataClassesDataContext dc = new 
            NorthWindDataClassesDataContext();
    
            var matchedCustomer = (from c in dc.GetTable<Customer>()
                                   where c.CustomerID == customerID
                                   select c).SingleOrDefault();
    
            try
            {
                dc.Customers.DeleteOnSubmit(matchedCustomer);
                dc.SubmitChanges();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    


    Junior

    sexta-feira, 22 de março de 2013 17:56
  • Se são muitos registros Rafa tenta assim

    using (var entities = new Entity())
       {                               
           foreach (Item item in entities.Items.Where(x => x.id == id))
                  entities.DeleteObject(item);
           entities.SaveChanges();
       }


    Junior

    sexta-feira, 22 de março de 2013 18:02
  • cara o 

    DeleteOnSubmit

    não aparece na lista de opções. está me dizendo que não estou usando referencia. mais está definido a referencia o do linq

    está me dando esse erro:

     'System.Data.Objects.ObjectQuery<WebForms.Admins>' does not contain a definition for 'DeleteOnSubmit' and no extension method 'DeleteOnSubmit' accepting a first argument of type 'System.Data.Objects.ObjectQuery<WebForms.Admins>' could be found (are you missing a using directive or an assembly reference?)

    e preciso usar linq to sql
    • Editado rafa-martin sexta-feira, 22 de março de 2013 18:08 r
    sexta-feira, 22 de março de 2013 18:06
  • ou vc usa linq to sql ou entity framework

    Junior

    sexta-feira, 22 de março de 2013 18:09
  • acontece q nenhum dos dois está funcionando. como posso fazer linq to sql? pq também não funciona.

    sexta-feira, 22 de março de 2013 18:11
  • meu problema é pq não está tendo referencia o deleteonsubmit.
    sexta-feira, 22 de março de 2013 18:24
  • vc deve estar fazendo algo errado.

    Junior

    sexta-feira, 22 de março de 2013 18:32
  • seguinte eu vi que tinha q criar um dbml. então criei um e aí as opções de deleteonsubmit e submitchanges apareceram. 

    aí fiz isso 

                if (!IsPostBack)
                {
                    DLChoqueDataContext db = new DLChoqueDataContext();

                    var choque = (from p in db.GetTable<tabela>()
                                  where 1 == 1
                                  select p).SingleOrDefault();

                    db.tabelas.DeleteOnSubmit(choque);
                    db.SubmitChanges();

                }

    só que está dizendo q minha sequencia tem mais de um elemento. esse é o erro: 

    Sequence contains more than one element

    eu preciso deletar todos os registros da tabela.

    pq o erro?

    sexta-feira, 22 de março de 2013 18:46
  • qdo vc tras singleordefault vc tras o primeiro registro, vc não esta trazendo todos vc tem que colocar tolist e fazer um for para ele ir deletando todos, faz como te passei o ultimo, esta ai abaixo.

    using (var entities = new Entity())
       {                               
           foreach (Item item in entities.Items.Where(x => x.id == id))
                  entities.DeleteObject(item);
           entities.SaveChanges();
       }


    Junior

    • Marcado como Resposta rafa-martin sexta-feira, 22 de março de 2013 19:21
    sexta-feira, 22 de março de 2013 18:58
  • consegui fazer.

    DLChoqueDataContext db = new DLChoqueDataContext();

    var consulta = (from p in db.tabelas select p).ToList();

    foreach (var detail in consulta)
    {
      db.tabelas.DeleteOnSubmit(detail);
    }
    db.SubmitChanges();

    só que aí eu coloquei db.tabela.DeleteAllOnSubmit(consulta); porque é mais rápida a exclusão.

    agora só uma dúvida, tem como fazer um truncate em vez de delete?

    sexta-feira, 22 de março de 2013 19:07
  • já foi feito.

    vlw pela ajuda

    sexta-feira, 22 de março de 2013 19:20
  • agora uma outra duvida. 

    tem q criar uma classe dbml. só que estou apontando para minha máquina. quando publicar a aplicação em um server... tenho que configurar os dados do servidor antes de publicar a aplicação?

    não tem como eu deixar isso automático? por exemplo, quando eu publicar no server, já reconhecer os dados do sql q estão instalados nele.

    é possível?

    sexta-feira, 22 de março de 2013 19:26