using System; using System.Collections; using System.Collections.Generic; using System.Data.Entity; using System.Data.Entity.Infrastructure; using System.Linq; using System.Net; using System.Web; using System.Web.Http; using System.Web.Http.Description; using DevExpress.Office.Utils; using iBemsDataService.Model; using iBemsDataService.Util; using System.Web.Http.OData; namespace iBemsDataService.Controllers { public class MonitoringPointController : ODataController { private iBemsEntities db = new iBemsEntities(); [Queryable] public IQueryable GetMonitoringPoint() { var query = from p in db.BemsMonitoringPoint from facility in db.CmFacility where p.SiteId == facility.SiteId && p.FacilityCode == facility.FacilityCode join b in db.CmBuilding on p.BuildingId equals b.BuildingId into groupBuilding from subBuilding in groupBuilding.DefaultIfEmpty() where p.SiteId == subBuilding.SiteId join z in db.CmZone on p.ZoneId equals z.ZoneId into groupZone from subZone in groupZone.DefaultIfEmpty() join f in db.CmFloor on p.FloorId equals f.FloorId into groupFloor from subFloor in groupFloor.DefaultIfEmpty() select new MonitoringPointEx { SiteId = p.SiteId, FacilityTypeId = p.FacilityTypeId, FacilityCode = p.FacilityCode, PropertyId = p.PropertyId, ValueType = p.ValueType, ServiceTypeId = p.ServiceTypeId, FuelTypeId = p.FuelTypeId, BuildingId = p.BuildingId ?? 0, FloorId = p.FloorId ?? 0, ZoneId = p.ZoneId ?? 0, Name = p.Name, Description = p.Description, FacilityName = facility.Name , BuildingName = (subBuilding == null) ? string.Empty : subBuilding.Name , ZoneName = (subZone == null) ? string.Empty : subZone.Name , FloorName = (subFloor == null) ? string.Empty : subFloor.Name, Location = ((subBuilding == null) ? string.Empty : subBuilding.Name) + " " + ((subZone == null) ? string.Empty : subZone.Name) + " " + ((subFloor == null) ? string.Empty : subFloor.Name) }; return query; } protected override void Dispose(bool disposing) { if (disposing) { db.Dispose(); } base.Dispose(disposing); } } public class MonitoringPointEx { public int SiteId { get; set; } public int FacilityTypeId { get; set; } public int FacilityCode { get; set; } public int PropertyId { get; set; } public int ValueType { get; set; } public Nullable ServiceTypeId { get; set; } public Nullable FuelTypeId { get; set; } public int BuildingId { get; set; } public int FloorId { get; set; } public int ZoneId { get; set; } public string Name { get; set; } public string FacilityName { get; set; } public string BuildingName { get; set; } public string FloorName { get; set; } public string ZoneName { get; set; } public string Location { get; set; } public string Description{ get; set; } }; }