Closed ChhaganSinha closed 10 months ago
Hi.. I want to return some data it may be some calculated data from controller like this
public class CampaignlogController : ODataController { public ILogger<CampaignlogController> Logger { get; } public TenantDbContext DbContext { get; } public CampaignlogController(ILogger<CampaignlogController> logger, ITenantDbResolver tenantDbResolver) { Logger = logger; DbContext = tenantDbResolver.TenantDbCtx; } [EnableQuery] public IQueryable<object> Get() { var campaignLogs = DbContext.CampaignLogs.AsQueryable(); var campaignLogsWithInfo = campaignLogs.Select(log => new { CampaignLog = log, HitCount = CampaignLog.Count(o=>o.IsHit == true); }); return campaignLogsWithInfo; } // [EnableQuery] //public IQueryable<CampaignLog> Get() //{ // var a = DbContext.CampaignLogs.AsQueryable(); // return ; //} }
here is CampaignLogWithInfoDto class
public class CampaignLogWithInfoDto { public CampaignLog CampaignLog { get; set; } public int HitCount { get; set; } }
and i was trying to get this return data in page like
@if (_task.IsCompleted) { <div class="row"> <div class="col-sm-12"> <GridComponent T="object" Grid="@_grid"></GridComponent> </div> </div> } else { <div class="col-sm-12" style="margin-top:5vh"> <div class="card-header"> <div class="loading-bar"></div> </div> </div> } @code { private CGrid<object> _grid; private Task _task; Action<IGridColumnCollection<object>> columns = c => { c.Add(o => ((CampaignLog)o).Id).Titled("LogID").SetWidth("30px").Css("table-bordered"); c.Add(o => ((CampaignLog)o).Camp.Id).Titled("CampID").SetWidth("30px").Css("table-bordered"); c.Add(o => ((CampaignLog)o).Camp.Name).Css("table-bordered").Titled("Campaign Name"); ; c.Add(o => ((CampaignLog)o).CampignType).Css("table-bordered").SetWidth("60px"); c.Add(o => ((CampaignLog)o).Camp.Category).Css("table-bordered").SetWidth("60px").Titled("Category"); c.Add(o => ((CampaignLog)o).IsHit).Css("table-bordered"); c.Add(o => ((CampaignLog)o).IsReported).Css("table-bordered"); c.Add(o => ((CampaignLog)o).CreatedOn).Css("table-bordered"); }; protected override async Task OnParametersSetAsync() { string url = $"Odata/Campaignlog?t={authState.TenantIdentifier}"; var query = new QueryDictionary<StringValues>(); var client = new GridODataClient<object>(HttpClient, url, query, false, "ordersGrid", columns, 50) .ChangePageSize(true) .Filterable() .ClearFiltersButton(true) .SetStriped(true) .WithGridItemsCount() .Searchable(true, false, false); _grid = client.Grid; _task = client.UpdateGrid(); await _task; var campaignLogs = _grid.Items.Select(item => { var campaignLogs = _grid.Items.Select(item => { var campaignLog = ((JObject)item).ToObject<CampaignLog>(); var HitCounts = ((JObject)item).ToObject<CampaignLogWithInfoDto>().HitCount; return new { CampaignLog = campaignLog, }; }).ToList(); } }
in above solution controller hitting and returning data but I am getting _grid items=0. can you please suggest possible solution to achieve this....
I think you should use CampaignLogWithInfoDto object for OData controller and EdmModel instead of using CampaignLog.
This would imply to also use CampaignLogWithInfoDto as grid object.
Hi.. I want to return some data it may be some calculated data from controller like this
here is CampaignLogWithInfoDto class
and i was trying to get this return data in page like
in above solution controller hitting and returning data but I am getting _grid items=0. can you please suggest possible solution to achieve this....