Пример #1
0
        public async Task <ArticleDataResultPagedItemsList> GetLatestArticleItemsPagedAsync(int pageNumber, int pageSize, IEnumerable <string> roles)
        {
            var articleDataResultPagedItemsList = new ArticleDataResultPagedItemsList(pageNumber, pageSize);

            using (NpgsqlConnection connection = new NpgsqlConnection(base.connectionString))
            {
                string sql = @"SELECT
                                    COUNT(1) OVER()		AS ""ResultsCount"",
                                    a.""Id"",
                                    a.""Title"",
                                    a.""CoverFileId""
                                    FROM ""Articles"" a
                                    LEFT JOIN ""ArticleRoles"" ar ON ar.""ArticleId"" = a.""Id""
                                    LEFT JOIN ""AspNetRoles"" r ON r.""Id"" = ar.""RoleId""
                                    WHERE r.""Name"" IS NULL OR r.""Name"" = ANY(:Roles)
                                    ORDER BY ""Timestamp"" DESC
                                    LIMIT :PageSize
                                    OFFSET(:PageNumber - 1) * :PageSize;
                            ";

                using (NpgsqlCommand command = new NpgsqlCommand(sql, connection))
                {
                    command.Parameters.AddWithValue("PageNumber", pageNumber);
                    command.Parameters.AddWithValue("PageSize", pageSize);

                    var rolesParam = new NpgsqlParameter("Roles", NpgsqlTypes.NpgsqlDbType.Array | NpgsqlTypes.NpgsqlDbType.Text);
                    rolesParam.Value = roles;
                    command.Parameters.Add(rolesParam);

                    await connection.OpenAsync();

                    using (NpgsqlDataReader dataReader = await command.ExecuteReaderAsync())
                    {
                        while (await dataReader.ReadAsync())
                        {
                            if (articleDataResultPagedItemsList.TotalResultsCount == 0)
                            {
                                articleDataResultPagedItemsList.TotalResultsCount = Convert.ToInt32(dataReader["ResultsCount"]);
                            }

                            var item = new ArticleDataResult(dataReader);
                            articleDataResultPagedItemsList.AddItem(item);
                        }
                    }
                }
            }

            return(articleDataResultPagedItemsList);
        }
Пример #2
0
 public HomeViewModel(ArticleDataResultPagedItemsList articleDataResultPagedItemsList)
     : this(articleDataResultPagedItemsList.Items)
 {
     this.TotalPagesCount = articleDataResultPagedItemsList.TotalPagesCount;
     this.PageNumber      = articleDataResultPagedItemsList.PageNumber;
 }