Каков наилучший способ удаления нескольких записей за один раз с помощью LINQ?
Лучший способ удалить несколько записей в запросе LINQ?
Ответ 1
Чтобы удалить записи с помощью Linq2Sql
CustomerDataContext ctx = new CustomerDataContext("connection string"); var customers = ctx.Customers.Where(c => c.Name == "david"); ctx.Customers.DeleteAllOnSubmit(customers); ctx.SubmitChanges();
Ответ 2
Хорошие старые SPROCs.....
Вы можете перетащить SPROC в ваш DBML файл, и он будет генерировать богатый метод в вашем классе databasecontext.
Ответ 3
Для LINQ to Entities больше подходит, но это может помочь:
Ответ 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)
, чтобы удалить каждый экземпляр в списке, присутствующем в базе данных