Разбивка на страницы с помощью Dapper и SQL Server - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть следующая таблица базы данных:

TABLE [dbo].[Horse] 
(
    [Id]      INT IDENTITY(1,1) NOT NULL,
    [Name]    NVARCHAR(250) NOT NULL,
    [HorseId] INT NOT NULL
    CONSTRAINT [PK_Shows] PRIMARY KEY CLUSTERED ([Id] ASC)
)

и таблица Riders:

TABLE [dbo].[HorseRider] 
(
    [Id]           INT IDENTITY(1,1) NOT NULL,
    [Name]         NVARCHAR(250) NOT NULL,
    [HorseRiderId] INT NOT NULL,
    [HorseId]      INT NOT NULL,
    [Birthday]     DATETIME          

    CONSTRAINT [PK_Cast] PRIMARY KEY CLUSTERED ([Id] ASC)
);

Я пытаюсь выполнить нумерацию страниц через Dapper.

Например, скажем, что для каждой страницы я хочу получить 10 лошадей, а для каждой лошади - всадников, которые на ней катались. Поэтому я создал модель данных для результата такого запроса:

public class HorseWithRiders
{
    public int HorseId { get; set; }
    public string Name { get; set; }
    List<Riders> Rider { get; set; }
}

public class Rider
{
    public int RiderId { get; set; }
    public string Name { get; set; }
    public string Birthday { get; set; }
}

А для Dapper, скорее всего, будет что-то вроде:

var result = connection.QueryFirst<List<HorseWithRiders>>(...query...);

Теперь .. может быть, есть какой-то недостаток в том, как я структурировал вещи ... но мне не удалось получить правильный запрос. Не могли бы вы помочь мне найти запрос, который соответствует созданной мной модели данных, но в то же время разбит на страницы? Сочетание двух вещей - это то, с чем я борюсь. Причина такой структуры данных в том, что я хочу обработать результат этого запроса через API как Json, который выглядит примерно так:

[
    {
        "HorseId" : 1,
        "Name" : Name,
        "Riders":[
            {
                "RiderId" : 21,
                "Name" : RiderName,
                "Birthday": 01/01/1990
            },
            {
                "RiderId" : 22,
                "Name" : RiderName,
                "Birthday": 02/02/1990
            }
        ]
    },
    {
        "HorseId" : 2,
        "Name" : Name,
        "Riders":[
            {
                "RiderId" : 24,
                "Name" : RiderName,
                "Birthday": 01/01/1990
            },
            {
                "RiderId" : 25,
                "Name" : RiderName,
                "Birthday": 02/02/1990
            },
            {
                "RiderId" : 26,
                "Name" : RiderName,
                "Birthday": 02/02/1990
            }
        ]
    }
]

Заранее спасибо!

РЕДАКТИРОВАТЬ: запрос:

select [Horse].Name, [HorseRider].Name, [HorseRider].PersonId, [HorseRider].Birthday, [HorseRider].HorseId from [HorseRider]
  JOIN [Horse] on [Horse].HorseId= [HorseRider].HorseId
  where [HorseRider].HorseId= @value 
  order by [HorseRider].Birthday desc
...