public GKClauseGroup GetClauseGroup() { var clauseGroup = new GKClauseGroup(); clauseGroup.ClauseJounOperationType = JoinOperator; foreach (var clauseGroupViewModel in ClauseGroups) { clauseGroup.ClauseGroups.Add(clauseGroupViewModel.GetClauseGroup()); } foreach (var clauseViewModel in Clauses) { var clause = new GKClause() { ClauseConditionType = clauseViewModel.SelectedClauseConditionType, StateType = clauseViewModel.SelectedStateType.StateBit, ClauseOperationType = clauseViewModel.SelectedClauseOperationType }; switch (clause.ClauseOperationType) { case ClauseOperationType.AllDevices: case ClauseOperationType.AnyDevice: clause.Devices = clauseViewModel.Devices.ToList(); clause.DeviceUIDs = clauseViewModel.Devices.Select(x => x.UID).ToList(); break; case ClauseOperationType.AllZones: case ClauseOperationType.AnyZone: clause.Zones = clauseViewModel.Zones.ToList(); clause.ZoneUIDs = clauseViewModel.Zones.Select(x => x.UID).ToList(); break; case ClauseOperationType.AllGuardZones: case ClauseOperationType.AnyGuardZone: clause.GuardZones = clauseViewModel.GuardZones.ToList(); clause.GuardZoneUIDs = clauseViewModel.GuardZones.Select(x => x.UID).ToList(); break; case ClauseOperationType.AllDirections: case ClauseOperationType.AnyDirection: clause.Directions = clauseViewModel.Directions.ToList(); clause.DirectionUIDs = clauseViewModel.Directions.Select(x => x.UID).ToList(); break; case ClauseOperationType.AllMPTs: case ClauseOperationType.AnyMPT: clause.MPTs = clauseViewModel.MPTs.ToList(); clause.MPTUIDs = clauseViewModel.MPTs.Select(x => x.UID).ToList(); break; case ClauseOperationType.AllDelays: case ClauseOperationType.AnyDelay: clause.Delays = clauseViewModel.Delays.ToList(); clause.DelayUIDs = clauseViewModel.Delays.Select(x => x.UID).ToList(); break; case ClauseOperationType.AllDoors: case ClauseOperationType.AnyDoor: clause.Doors = clauseViewModel.Doors.ToList(); clause.DoorUIDs = clauseViewModel.Doors.Select(x => x.UID).ToList(); break; case ClauseOperationType.AnyPumpStation: case ClauseOperationType.AllPumpStations: clause.PumpStations = clauseViewModel.PumpStations.ToList(); clause.PumpStationsUIDs = clauseViewModel.PumpStations.Select(x => x.UID).ToList(); break; } if (clause.HasObjects()) clauseGroup.Clauses.Add(clause); } return clauseGroup; }