public async Task <(List <Tag>, int)> getTags(int startat, int quantity, TagFieldEnum fieldFilter, string fieldValue, TagFieldEnum orderField, OrderEnum order) { var queryTag = _context.Tags.Where(x => x.tagId > 0); queryTag = ApplyFilter(queryTag, fieldFilter, fieldValue); queryTag = ApplyOrder(queryTag, orderField, order); var tags = await queryTag .Skip(startat).Take(quantity).Select(item => new Tag() { tagId = item.tagId, tagDescription = item.tagDescription, tagName = item.tagName, physicalTag = item.physicalTag, tagGroup = item.tagGroup, tagType = item.tagType, thingGroupId = item.thingGroupId, thingGroup = new ThingGroup() { thingGroupId = item.thingGroupId, groupCode = item.thingGroup.groupCode, groupDescription = item.thingGroup.groupDescription, groupName = item.thingGroup.groupName, thingsIds = item.thingGroup.thingsIds } }).ToListAsync(); var queryTagCount = _context.Tags.Where(x => x.tagId > 0); queryTagCount = ApplyFilter(queryTagCount, fieldFilter, fieldValue); queryTagCount = ApplyOrder(queryTagCount, orderField, order); var totalCount = await queryTagCount.CountAsync(); return(tags, totalCount); }
private IQueryable <Tag> ApplyFilter(IQueryable <Tag> queryTags, TagFieldEnum fieldFilter, string fieldValue) { switch (fieldFilter) { case TagFieldEnum.physicalTag: queryTags = queryTags.Where(x => x.physicalTag.Contains(fieldValue)); break; case TagFieldEnum.tagDescription: queryTags = queryTags.Where(x => x.tagDescription.Contains(fieldValue)); break; case TagFieldEnum.tagName: queryTags = queryTags.Where(x => x.tagName.Contains(fieldValue)); break; case TagFieldEnum.tagType: if (fieldValue.ToLower() == TagTypeEnum.Input.ToString().ToLower()) { queryTags = queryTags.Where(x => x.tagType == TagTypeEnum.Input); } else if (fieldValue.ToLower() == TagTypeEnum.Output.ToString().ToLower()) { queryTags = queryTags.Where(x => x.tagType == TagTypeEnum.Output); } break; default: break; } return(queryTags); }
private IQueryable <Tag> ApplyOrder(IQueryable <Tag> queryTags, TagFieldEnum orderField, OrderEnum order) { switch (orderField) { case TagFieldEnum.physicalTag: if (order == OrderEnum.Ascending) { queryTags = queryTags.OrderBy(x => x.physicalTag); } else { queryTags = queryTags.OrderByDescending(x => x.physicalTag); } break; case TagFieldEnum.tagDescription: if (order == OrderEnum.Ascending) { queryTags = queryTags.OrderBy(x => x.tagDescription); } else { queryTags = queryTags.OrderByDescending(x => x.tagDescription); } break; case TagFieldEnum.tagName: if (order == OrderEnum.Ascending) { queryTags = queryTags.OrderBy(x => x.tagName); } else { queryTags = queryTags.OrderByDescending(x => x.tagName); } break; default: queryTags = queryTags.OrderBy(x => x.tagId); break; } return(queryTags); }