Групповые операции в LINQ to SQL

31.10.2009 11:35 / Артём Волк / 1390 просмотров / ...

LINQ to SQL не умеет оптизировать однотипные действия над несколькими сущностями, например, для удаления большого количества записей по условию их придётся сначала выбрать отдельным запросом, пометить как удалённые с помощью методов DeleteOnSubmit() или DeleteAllOnSubmit(), а при вызове SubmitChanges() будет сгенерировано столько SQL-запросов c DELETE, сколько было удаляемых записей.

Один из вариантов, заодно, обходим ещё одно ограничение: невозможность передать в WHERE IN ... напрямую массив значений:

	
    public static void DeleteGroup(List<int> listGoods)
    {
        using (SomeContext dataContext = UtilsLinq.GetContext())
        {
            string list = String.Join(",", (from i in listGoods select i.ToString()).ToArray<string>());
			dataContext.ExecuteCommand(String.Format("DELETE FROM [dbo].[Goods] WHERE ([Id] IN ({0}))", list));
        }
    }

P.S. Случайно нашлось ещё одно решение.