public DataSourceResult <TableTemplateGridListDto> GetList(DataSourceRequestDto <TableTemplateGridListDto> request) { var list = Source.Select(i => new TableTemplateGridListDto { Id = i.Id, DateFrom = i.DateFrom, Rate = i.Rate }); return(list.AsQueryable().ToDataSourceResult(request)); }
/// <summary> /// Получает Список всех банков. todo: Вынести в отдельный сервис /// </summary> /// <param name="request"></param> /// <returns></returns> public DataSourceResult <BankDto> GetBankQueryResultDto(DataSourceRequestDto <object> request) { IQueryable <BankDto> query = DataContext.GetTable <BnkSeekEntity>(). Select(e => new BankDto { Bik = e.Bik, Name = e.Name }); return(query.ToDataSourceResult(request)); }
public void SelectFakeTest() { var request = new DataSourceRequestDto <object>() { Take = 3 }; var queryDto = Service.GetBankQueryResultDto(request); Assert.AreEqual(3, queryDto.Data.Count()); }
public HttpResponseFile DownloadExcel(DataSourceRequestDto <TableTemplateGridListDto> request) { var list = Source.Select(i => new TableTemplateGridListDto { Id = i.Id, DateFrom = i.DateFrom, Rate = i.Rate }); string strDto = list.AsQueryable().ToDataSourceResult(request).ToJson(); string fileName = "TestFile.txt"; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strDto)); return(ms.AttachmentResponse(fileName)); }
/// <summary> /// Запрос к списочным данным. Метод может быть переопеределен и в этом случае /// не требуется переопределять методы Projection(), EntityQueryCustomFilters() и ListDtoQueryCustomFilters. /// </summary> /// <param name="request">Параметры запроса: фильтр, сортировки, пейджинг</param> /// <returns>Страница списка.</returns> public virtual DataSourceResult <TListDto> GetQueryResultDto(DataSourceRequestDto <TFilterDto> request) { var query = GetQuery(); // Накладываем кастомные фильтры query = EntityQueryCustomFilters(query, request.FilterDto); // Получение проекции var queryListDto = Projection(query, request.FilterDto); queryListDto = ListDtoQueryCustomFilters(queryListDto, request.FilterDto); // Накладываем кастомные фильтры var dsResult = queryListDto.ToDataSourceResult(request); return(dsResult); }
/// <summary> /// Запрос к списочным данным. Метод может быть переопеределен и в этом случае тогда /// не требуется переопределять методы Projection() и QueryCustomFilters(). /// </summary> /// <param name="queryParam">Параметры запроса: фильтр, сортировки, пейджинг</param> /// <returns>Страница списка.</returns> public virtual DataSourceResult <TListDto> GetQueryResultDto(DataSourceRequestDto <TFilterDto> request) { var query = GetQuery().AsQueryable(); // Накладываем кастомные фильтры query = QueryCustomFilters(query, request.FilterDto); // Получение проекции. var queryList = query.Select(Projection()); // Накладываем кастомные фильтры queryList = QueryCustomFilters(queryList, request.FilterDto); //Kendo фильтры var dsResult = queryList.ToDataSourceResult(request); return(dsResult); }
public void SelectDifficultFakeTest() { // Подготовка var request = new DataSourceRequestDto <TaxRateForBankFilterDto>() { FilterDto = new TaxRateForBankFilterDto() { CurDate = new DateTime(2017, 1, 3) } }; // Действие var queryDto = Service.GetQueryResultDto(request); // Проверка. Ожидаем три записи, т.к. данные группируются по БИК, // а в тестовых данных три уникальных БИКа Assert.AreEqual(3, queryDto.Data.Count()); }
public DataSourceResult <TurnoverPlanDto> Query(DataSourceRequestDto <TurnoverPlanFilterDto> request) { return(TurnoverPlanService.GetQueryResultDto(request)); }
/// <summary> /// Списочный запрос /// </summary> /// <param name="request">Параметры запроса</param> /// <returns>Результат, с которым умеет работать Kendo.</returns> public override DataSourceResult <TransExitNodeActionListDto> GetQueryResultDto(DataSourceRequestDto <TransExitNodeActionFilterDto> request) { // Запрос с выборкой гуида сессии и даты последнего действия сесси. var queryA = DataContext.GetTable <TransExitNodeActionEntity>() .GroupBy(item => item.SessionId) .Select(g => new { SessionId = g.Key, Date = g.Max(i => i.Date) }); // Запрос с выборкой последних действий в сессии. var query = DataContext.GetTable <TransExitNodeActionEntity>() .Join(queryA, tena => new { SessionId = tena.SessionId, Date = tena.Date }, a => new { SessionId = a.SessionId, Date = a.Date }, (tena, a) => tena); // Применение фильтра с датами. if (request.FilterDto != null) { var filter = request.FilterDto; if (filter.StartPeriodDateTime.HasValue) { query = query.Where(item => item.Date >= filter.StartPeriodDateTime.Value); } if (filter.EndPeriodDateTime.HasValue) { query = query.Where(item => item.Date < filter.EndPeriodDateTime.Value); } } // Общее кол-во. int total = query.Count(); // Пейжинг. query = query.OrderBy(item => item.Id).Skip(request.Skip).Take(request.Take); // Финальный запрос - соедиение action с network'ами. var resultQuery = query.Join(DataContext.GetTable <TransNetworkExitNodeInActionEntity>(), tena => tena.Id, n => n.TransExitNodeActionId, (tena, n) => new { ActionEnity = tena, NetworkEntity = n }); // Часть логики реализовано на IEnumerable, потому-что требуется конкатенация занчения networkIps. List <TransExitNodeActionListDto> resultList = new List <TransExitNodeActionListDto>(); // Группируем по идентификатору сущности Действия. foreach (var groupItem in resultQuery.ToArray().GroupBy(i => i.ActionEnity.Id)) { // Получаем первую любое действия, т.к. они одинаковые. TransExitNodeActionEntity entity = groupItem.First().ActionEnity; // Получаем network с именем LAN. var lanNetwork = groupItem.FirstOrDefault(i => i.NetworkEntity != null && i.NetworkEntity.Name == "LAN"); // Получаем ip-адереса network'a через запятую. var networks = groupItem.Where(i => i.NetworkEntity != null).Select(i => i.NetworkEntity); string networkIps = networks.Any() ? string.Join(", ", networks.Select(n => n.Ip)) : null; resultList.Add(new TransExitNodeActionListDto { SessionId = entity.SessionId, Action = entity.Action, Date = entity.Date, ExternalIP = entity.ExternalIP, HostName = entity.HostName, ProfileName = entity.ProfileName, NetworkIps = networkIps, Mac = lanNetwork != null ? lanNetwork.NetworkEntity.Mac : null }); } return(new DataSourceResult <TransExitNodeActionListDto> { Total = total, Data = resultList }); }
/// <summary> /// Списочный запрос. Возвращает детализация по сессии. /// </summary> /// <param name="request">Параметры запроса. Содержат последние "действие" сессии для которой нужно вывести детализацию.</param> /// <returns>Результат, с которым умеет работать Kendo.</returns> public DataSourceResult <TransExitNodeActionListDto> GetSesionDetailsByLastAction(DataSourceRequestDto <TransExitNodeActionListDto> request) { string sessionId = request.FilterDto.SessionId; var query = DataContext.GetTable <TransExitNodeActionEntity>() .Where(action => action.SessionId == sessionId); // Финальный запрос - соедиение action с network'ами. var resultQuery = query.Join(DataContext.GetTable <TransNetworkExitNodeInActionEntity>(), tena => tena.Id, n => n.TransExitNodeActionId, (tena, n) => new { ActionEnity = tena, NetworkEntity = n }); // Часть логики реализовано на IEnumerable, потому-что требуется конкатенация занчения networkIps. List <TransExitNodeActionListDto> resultList = new List <TransExitNodeActionListDto>(); // Группируем по идентификатору сущности Действия. foreach (var groupItem in resultQuery.ToArray().GroupBy(i => i.ActionEnity.Id)) { // Получаем первую любое действия, т.к. они одинаковые. TransExitNodeActionEntity entity = groupItem.First().ActionEnity; // Получаем network с именем LAN. var lanNetwork = groupItem.FirstOrDefault(i => i.NetworkEntity != null && i.NetworkEntity.Name == "LAN"); // Получаем ip-адереса network'a через запятую. var networks = groupItem.Where(i => i.NetworkEntity != null).Select(i => i.NetworkEntity); string networkIps = networks.Any() ? string.Join(", ", networks.Select(n => n.Ip)) : null; resultList.Add(new TransExitNodeActionListDto { Action = entity.Action, Date = entity.Date, ExternalIP = entity.ExternalIP, HostName = entity.HostName, ProfileName = entity.ProfileName, NetworkIps = networkIps, Mac = lanNetwork != null ? lanNetwork.NetworkEntity.Mac : null }); } return(new DataSourceResult <TransExitNodeActionListDto> { Data = resultList }); }