Exemplo n.º 1
0
        public async Task <ResultList <Paper> > search([FromQuery]
                                                       List <string> keyword      = null, [FromQuery] string summary       = null, [FromQuery] string startTime = null,
                                                       [FromQuery] string endTime = null, [FromQuery] List <string> author = null, [FromQuery] int skip         = 0, [FromQuery] int take = 10
                                                       )
        {
            try
            {
                var sql = _service._context.Papers.AsQueryable();

                if (summary != null)
                {
                    sql = _service.PaperSummery(sql, summary);
                }
                if (startTime != null && endTime != null)
                {
                    sql = _service.PaperDate(sql, DateTime.Parse(startTime), DateTime.Parse(endTime));
                }
                bool hasnext = true;
                if (keyword.Count != 0 || author.Count != 0)
                {
                    var newsql = sql.ToAsyncEnumerable();

                    if (keyword.Count != 0)
                    {
                        newsql = _service.PaperKeyword(newsql, keyword);
                    }
                    if (author.Count != 0)
                    {
                        newsql = _service.PaperAuthor(newsql, author);
                    }
                    var eps = await _service.GetSqlResult(newsql, skip, take);

                    var ecount = await sql.CountAsync();

                    if (eps.Count == 0)
                    {
                        hasnext = false;
                    }
                    return(new ResultList <Paper>(200, "success", eps, hasnext, ecount, ""));
                }

                var ps = await _service.GetSqlResult(sql, skip, take);

                var count = await sql.CountAsync();


                if (ps.Count == 0)
                {
                    hasnext = false;
                }
                return(new ResultList <Paper>(200, "success", ps, hasnext, count, ""));
            }
            catch (Exception e)
            {
                return(new ResultList <Paper>(400, e.Message, null, false, 0, ""));
            }
        }