Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

ctx.Customers.DeleteAllOnSubmit(customers);
ctx.SubmitChanges();

Ответ 4

Удаление многих записей на основе предложения single 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();, как я сделал в первом черновике

Ответ 5

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

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

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

ctx.SubmitChanges();

Ответ 6

Использование сущности framework 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();

Ответ 7

Я согласен с 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);
}

Ответ 8

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

        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(listofitemtodelete), чтобы удалить каждый экземпляр в списке, присутствующем в базе данных