2016-03-27 3 views
0

Я использую Entity Framework.Удалить кратные элементы C# EF

try 
{ 
    List<DataGridViewRow> selectedRows = (from row in dtg.Rows.Cast<DataGridViewRow>() 
              where Convert.ToBoolean(row.Cells["Borrar"].Value) == true 
              select row).ToList(); 
    if (MessageBox.Show(string.Format("¿Deseas borrar {0} registros?", selectedRows.Count), "Confirmacion", MessageBoxButtons.YesNo) == DialogResult.Yes) 
    { 
     foreach (DataGridViewRow row in selectedRows) 
     { 
      using (var context = new SistemaVentasEntities()) 
      { 
       REGISTROS registro= context.AUX_REGISTROS .Where(m => m.ID== m.ID).FirstOrDefault(); 
       context.REGISTROS.Remove(registro); 
       context.SaveChanges(); 
      } 
      this.CargarGrid(); 
     } 
    } 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message + ex.StackTrace); 
} 

Здесь все правильно, исключается количество записей, которые я выбираю. но только непрерывный, я хотел бы удалить только выбранные элементы, если у меня есть список ID { 1,2,3,4 }, и я хочу удалить 1 и 3, это не сработает, этот код удалит, например, 1 и 2.

Я использую флажок в DataGridView, нажав на кнопку.

+0

Тьфу ... именно поэтому я использую 'PetaPoco' в эти дни ... – code4life

ответ

0

Я предполагаю. Прежде чем удалять сущности, сначала попытайтесь найти их и поместить в отдельный сбор, а затем в отдельный цикл удалите их из БД, а затем вызовите изменения сохранения в контексте. Моя ставка заключается в том, что вы относитесь к изменению коллекции, на которой вы работаете. Это вызывает у вас проблему с выборочным удалением.

+0

Это то, что им пытаются сделать ... но я не могу получить определить элементы, которые я хочу удалить –

0

Я считаю, что ваша проблема заключается в этом немного:

.Where(m => m.ID== m.ID) 

Вы сравниваете идентификатор в фильтре с идентификатором в фильтре (который всегда будет истинным). Я думаю, что вы хотите что-то вроде:

.Where(m => m.ID == row.ID) 

... кроме кода для извлечения вашего идентификатора из вашей строки, возможно, именно это. :)

0

EntityFramework.Extended имеет действительно красивый метод расширения для такого рода работ. Вы можете найти более подробную информацию here.

Пример из документации по:

//delete all users where FirstName matches 
context.Users 
    .Where(u => u.FirstName == "firstname") 
    .Delete(); 
Смежные вопросы