Лучший способ удалить несколько записей в запросе LINQ? - PullRequest
22 голосов
/ 15 мая 2009

Каков наилучший способ удаления нескольких записей за один раз с LINQ?

Ответы [ 9 ]

26 голосов
/ 15 мая 2009

Чтобы удалить записи с Linq2Sql

CustomerDataContext ctx = new CustomerDataContext("connection string");
var customers = ctx.Customers.Where(c => c.Name == "david");

ctx.Customers.DeleteAllOnSubmit(customers);
ctx.SubmitChanges();
2 голосов
/ 28 апреля 2015

Удаление многих записей на основе одного предложения where

context.EntityModel
            .RemoveAll(r => r.property == "propertyEntered");

Но вы также можете удалить записи из базы данных, которых нет в List<ListOfBadRecords>

context.EntityModel
            .Where(w => w.propertyID == ID).ToList()
            .RemoveAll(r => !ListOfBadRecords.Any(a => a.anyID == r.propertyID ));

Edit:

Не уверен, что быстрее, но вы можете сделать второй запрос с этим также

.RemoveAll(r => !ListOfBadRecords.Select(s=>s.propertyID ).Contains(w.propertyID ))

Edit2: не забудьте context.SaveChanges();, как я делал в первом проекте

2 голосов
/ 17 февраля 2015

Использование структуры объекта 6

// Database context
EntitiesContext db = new EntitiesContext(connString);
// Select all the records to be deleted
IEnumerable<entity> list = db.entity.where(x=>x.id == id).toList();
// Use Remove Range function to delete all records at once
db.entity.RemoveRange(list);
// Save changes
db.SaveChanges();
2 голосов
/ 15 мая 2009

Следующее больше для LINQ to Entities, но может помочь:

Массовое удаление в LINQ to Entities

2 голосов
/ 15 мая 2009

Старые добрые SPROCs .....

Вы можете перетащить SPROC в ваш файл DBML, и он сгенерирует богатый метод в вашем классе databasecontext.

1 голос
/ 23 августа 2017

Вот как я решил проблему:

        try
        {
            List<MaterialPartSerialNumber> list = db.MaterialPartSerialNumbers.Where(s => s.PartId == PartId && s.InventoryLocationId == NewInventoryLocationId && s.LocationId == LocationId).ToList();
            db.MaterialPartSerialNumbers.RemoveRange(list);
            db.SaveChanges();
        }
        catch(Exception ex)
        {
            string error = ex.Message;
        }

Сначала вы можете найти список элементов, которые хотите удалить.

Затем вы можете использовать функцию RemoveRange(**list_of_item_to_delete**), чтобы она удаляла каждый экземпляр в списке, присутствующем в базе данных.

Согласно MSDN, метод удаляет ряд элементов из списка.

Для получения дополнительной информации, проверьте здесь https://msdn.microsoft.com/en-us/library/y33yd2b5(v=vs.110).aspx

1 голос
/ 28 января 2011

может быть немного поздно для этого ответа, но сегодня я сам столкнулся с этим требованием.

CustomerDataContext ctx = new CustomerDataContext("connection string");

ctx.Customers.DeleteAllOnSubmit(ctx.Customers.Where(c => c.Name == "david"));

ctx.SubmitChanges();
0 голосов
/ 22 февраля 2018

Это то, что я использовал, сначала создайте объект IENumerable из таблицы, в которой находятся удаляемые записи, затем просто используйте RemoveRange и, наконец, просто сохраните изменения в базе данных. Допустим, вы хотите удалить все продукты из одного определенного идентификатора поставщика в таблице «Продукты», вот как вы можете это сделать.

IEnumerable ProductsToRemove = db.Products.Where (x => x.SupplierId == Supplierid); db.Products.RemoveRange (ProductsToRemove); db.SaveChanges ();

0 голосов
/ 13 декабря 2012

Я согласен с Khurram, гораздо эффективнее сделать это с помощью простой хранимой процедуры с LINQ (при условии, что для этого у вас достаточно прав в SQL). Я дополню это примером.

Хранимая процедура:

CREATE PROCEDURE [dbo].[RemovePermissionsFromRole] 
(
    @ROLE_ID int
)
AS
BEGIN
    SET NOCOUNT ON;

    DELETE FROM [RolePermissions] WHERE [RoleID] = @ROLE_ID;
END

Перетащите хранимую процедуру из проводника базы данных на панель методов в файле DBML. Сохраните файл. И в коде:

if (Request.QueryString["RoleID"] != null) {
    int roleID = Convert.ToInt32(Request.QueryString["RoleID"]);

    SETSDataContext context = new SETSDataContext();
    context.RemovePermissionsFromRole(roleID);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...