public static void Sync(long roleId, List <long> approveIds) { var t = APDBDef.ResRoleApprove; using (APDBDef db = new APDBDef()) { var existIds = APQuery.select(t.ApproveId) .from(t) .where (t.RoleId == roleId).query(db, reader => { return(reader.GetInt64(0)); }).ToList(); db.BeginTrans(); try { foreach (var id in approveIds) { if (existIds.Contains(id)) { existIds.Remove(id); } else { db.ResRoleApproveDal.Insert(new ResRoleApprove(0, roleId, id)); } } if (existIds.Count > 0) { db.ResRoleApproveDal.ConditionDelete(t.RoleId == roleId & t.ApproveId.In(existIds.ToArray())); } db.Commit(); } catch { db.Rollback(); } } }