Каков наилучший способ удалить несколько записей за один раз с помощью LINQ?Лучший способ удалить несколько записей в запросе LINQ?
ответ
Старые добрые SPROCs .....
Вы можете перетащить SPROC в файл DBML и он будет генерировать богатый метод в классе DatabaseContext.
Для удаления записей с Linq2Sql
CustomerDataContext ctx = new CustomerDataContext("connection string"); var customers = ctx.Customers.Where(c => c.Name == "david"); ctx.Customers.DeleteAllOnSubmit(customers); ctx.SubmitChanges();
Это один из самых простых способов, но я бы не сказал, что это самый эффективный способ. На самом деле оптимизация не выполняется. Сгенерированный SQL перечисляет все объекты, соответствующие вашему запросу, а затем вручную перебирает их, чтобы удалить их. Просмотреть это сообщение - http://stackoverflow.com/questions/869209/bulk-deleting-via-linq – David
Если вы не используете LINQ to SQL, см. Http://stackoverflow.com/q/1781175/24267 – mhenry1384
Невозможно неявно преобразовать тип «System.Linq.IQueryable
Следующие больше для LINQ к Entities, но это может помочь:
может быть, его Лил поздно этого ответа, но сегодня я столкнулся с этим требую сам я, и я пришел с этим решением
CustomerDataContext ctx = new CustomerDataContext("connection string");
ctx.Customers.DeleteAllOnSubmit(ctx.Customers.Where(c => c.Name == "david"));
ctx.SubmitChanges();
Несомненно, вы не можете претендовать на то, чтобы« придумать »это решение когда все, что вы делали, переместило объявление 'cust' из самого популярного ответа на метод' DeleteAllOnSubmit'. – Sheridan
Я согласен с Куррамом, это гораздо эффективнее сделать это с помощью простой хранимой процедуры с 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);
}
Использование рамки сущности 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();
Удаление много записей на основе одного, где положение
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:
Неуверенный которым быстрее, но вы могли бы сделать 2-й запрос с этим также
.RemoveAll(r => !ListOfBadRecords.Select(s=>s.propertyID).Contains(w.propertyID))
Edit2: не забудьте context.SaveChanges();
, как я сделал в первом проекте
Здесь как я решил проблему:
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;
}
Во-первых, вы можете найти список o f элементы, которые вы хотите удалить.
Затем вы можете использовать функцию RemoveRange(**list_of_item_to_delete**)
, чтобы удалить каждый экземпляр из списка, присутствующего в базе данных.
Согласно MSDN, метод удаляет ряд элементов из списка.
Для получения дополнительной информации, проверить его здесь https://msdn.microsoft.com/en-us/library/y33yd2b5(v=vs.110).aspx
PLS объясняет, почему он работает, а не просто отправьте код как ответ –
Это то, что я использовал, сначала создать IEnumerable объект таблицы, где находятся записи, которые должны быть удалены являются, а затем просто использовать RemoveRange, и, наконец, просто сохраните изменения база данных. Предположим, вы хотите удалить все продукты из одного идентификатора поставщика в таблице Products, так вы можете это сделать.
IEnumerable ProductsToRemove = db.Products.Where (x => x.SupplierId == Supplierid); db.Products.RemoveRange (ProductsToRemove); db.SaveChanges();
- 1. Лучший способ удалить 'дубликаты записей'
- 2. Linq для обновления SQL несколько записей в одном запросе
- 3. Можно ли удалить несколько записей в одном запросе в linq для объекта?
- 4. LINQ Удалить несколько строк
- 5. Лучший способ удалить несколько слов из строки?
- 6. Лучший способ выполнить несколько выборок в одном запросе mysql?
- 7. Какой лучший способ удалить миллионы записей в TSQL?
- 8. Лучший способ периодически удалять набор записей с LINQ to SQL
- 9. Лучший способ написать Linq Where statement
- 10. Лучший способ установить несколько типов учетных записей в ZendFramework?
- 11. Лучший способ обновления в Linq To SQL
- 12. Как удалить несколько записей в Linq для Entity?
- 13. Лучший способ сделать несколько ассоциаций таблиц в файле LINQ dbml?
- 14. лучший способ для архивирования записей
- 15. Лучший способ получить количество записей
- 16. Subsonic Удалить несколько записей
- 17. Удалить несколько записей в php
- 18. Лучший способ удалить все ассоциации has_and_belongs_to_many без удаления записей
- 19. Лучший способ удалить дубликатMovieClip?
- 20. LINQ (метод) возвращение несколько записей
- 21. Добавить несколько записей, используя Linq для Entity?
- 22. Сохранить() несколько записей в 1 запросе PUT
- 23. Использование LINQ Как удалить несколько записей из перекрестных ссылок таблицы
- 24. Несколько соединений в sql-запросе - лучший вариант
- 25. Ужасная инструкция LINQ, лучший способ?
- 26. Как сохранить несколько записей в одном запросе с обратными вызовами
- 27. Лучший способ редактирования записей в ASP.NET?
- 28. Лучший способ создать группу записей в databse
- 29. Как применить несколько orderby в linq-запросе
- 30. Несколько левых объединений в запросе LINQ C#
Если вам нужно сделать что-то вроде 'DELETE FROM table WHERE ...', тогда рассмотрим использование SQL. LINQ не может быть лучшим инструментом для этой работы. – Myster