public static ModificationResult Delete <T>(this Session session, CriteriaOperator criteria) where T : IXPObject { if (ReferenceEquals(criteria, null)) { criteria = CriteriaOperator.Parse("True"); } XPClassInfo classInfo = session.GetClassInfo(typeof(T)); /// if you are using DevExpress 11.2 or earlier /// var batchWideData = new BatchWideDataHolder(session); var batchWideData = new BatchWideDataHolder4Modification(session); int recordsAffected = (int)session.Evaluate <T>(CriteriaOperator.Parse("Count()"), criteria); /// if you are using DevExpress 13.1.5 or earlier /// List<ModificationStatement> collection = DeleteQueryGenerator.GenerateDelete(classInfo, criteria, batchWideData); List <ModificationStatement> collection = DeleteQueryGenerator.GenerateDelete(classInfo, ObjectGeneratorCriteriaSet.GetCommonCriteriaSet(criteria), batchWideData); foreach (ModificationStatement item in collection) { item.RecordsAffected = recordsAffected; } ModificationStatement[] collectionToArray = collection.ToArray <ModificationStatement>(); ModificationResult result = session.DataLayer.ModifyData(collectionToArray); return(result); }