Удаление строк в таблице с помощью Linq to SQL
У меня есть спортивная база данных с таблицей groupmembers, которые имеют поля ID, groupID и memberID. Я получаю memberID из текстового поля txtRemoveGroupMember и groupID из списка флажков. Теперь я хочу удалить строки, которые имеют как groupID, так и memberID. Я пробовал этот код:
foreach(ListItem listItem in cblRemoveMemberFromGroup.Items)
{
int memberid = Convert.ToInt32(txtRemoveGroupMember.Text);
int groupid = Convert.ToInt32(listItem.Value);
var removeFromGroup = from gm in dataContext.GroupMembers
where (gm.memberID == memberid) && (gm.groupID == groupid)
select gm;
dataContext.GroupMembers.DeleteOnSubmit(removeFromGroup);
dataContext.SubmitChanges();
}
но я получаю эту ошибку: Ошибка 7 Аргумент 1: не удается конвертировать из 'системы.В LINQ.IQueryable ' to ' GSI_side.GroupMember'
и эта ошибка: Ошибка 6 лучших перегруженный метод матч за 'систему.Данные.В LINQ.Таблица.Метод Deleteonsubmit(GSI_side.GroupMember)' имеет некоторые недопустимые аргументы
надеюсь, кто-то может помочь мне понять это!
3 ответов
вы должны позвонить .ToList ()
var items = removeFromGroup.ToList();
foreach (var item in items)
dataContext.GroupMembers.DeleteOnSubmit(item);
для пакетных удалений я использую этой, потому что LINQ to SQL сначала загружает все данные, которые будут удалены, а затем удаляет каждый по каждому.
https://terryaney.wordpress.com/2008/04/14/batch-updates-and-deletes-with-linq-to-sql/
https://github.com/longday/LINQ-to-SQL-Batch-Updates-Deletes
removeFromGroup
по-прежнему типа IQuerable
.
вам нужно указать фактический GroupMember
удалить.
вы могли бы использовать
GroupMember removeFromGroup = (from gm in dataContext.GroupMembers
where (gm.memberID == memberid) && (gm.groupID == groupid)
select gm).SingleOrDefault();
dataContext.GroupMembers.DeleteOnSubmit(removeFromGroup);
dataContext.SubmitChanges();
кроме того, если ваш запрос возвращает коллекцию (судя по ее виду, это не будет, так как вы фильтруете по memberId
) можно использовать
List<GroupMember> removeFromGroup = (from gm in dataContext.GroupMembers
where (gm.memberID == memberid) && (gm.groupID == groupid)
select gm).ToList();
dataContext.GroupMembers.DeleteAllOnSubmit(removeFromGroup);
dataContext.SubmitChanges();
var listToRemove=(from a in DB.Table
where a.Equals(id)
select a).ToList();
DB.Table.DeleteAllOnSubmit(listToRemove);
DB.SubmitChanges();