#sql #sql-server
#sql #sql-сервер
Вопрос:
Я хочу получить следующую модель от dapper:
public class CourseShowViewModel
{
public long Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string ImageId { get; set; }
public string DemoLink { get; set; }
public long TotalDuration { get; set; }
public TimeSpan TotalDurationTimeSpan { get; set; }
public CourseStatusEnum CourseStatusEnum { get; set; }
public string CourseStatusString { get; set; }
public double Price { get; set; }
public string AgePeriod { get; set; }
public bool CanView { get; set; }
public List<CourseItemShowViewModel> CourseItemShowViewModels { get; set; }
}
public class CourseItemShowViewModel
{
public long Id { get; set; }
public string Title { get; set; }
public long Duration { get; set; }
public TimeSpan DurationTimeSpan { get; set; }
public DateTime CreatedDate { get; set; }
public string FileId { get; set; }
}
запрос sql является:
select c.[Id]
,c.[Title]
,c.[Description]
,c.[CreatedDate]
,c.[ImageId]
,c.[CourseStatusEnum]
,c.[TotalDuration]
,c.[Price]
,c.[CategoryEnum]
,c.[AgePeriod]
,c.[DemoLink]
, 0 as [CanView]
,cp.[Id]
,cp.[Title]
,cp.[CreatedDate]
,cp.[Duration]
,cp.[FileId]
from Course as c
left join CourseParts cp on cp.CourseId = c.Id
Проблема в том, как установить [CanView]
. если пользователь купил курс, значение должно быть 1
, а остальное должно быть 0
.
также [FileId]
выглядит как [CanView]
, и разница в том, что если пользователь купил курс, значение должно быть File of the coursePart for download
, а остальное должно быть null
.
Order
таблица содержит пользовательские заказы. проверить запрос, купленный пользователем:
if exists (select Id from Order where UserId = @userId and CourseId = @courseId)
Ответ №1:
Я не уверен, насколько модель dapper имеет отношение к вашему вопросу. Кажется, в основном сосредоточено на том, как заполнить [CanView]
и как скрыть FileId
на основе условия.
Но, основываясь на вашем заданном запросе, ввести данные в два поля не так сложно.
select c.[Id]
,c.[Title]
,c.[Description]
,c.[CreatedDate]
,c.[ImageId]
,c.[CourseStatusEnum]
,c.[TotalDuration]
,c.[Price]
,c.[CategoryEnum]
,c.[AgePeriod]
,c.[DemoLink]
,
CASE WHEN EXISTS (select Id from Order where UserId = @userId and CourseId = @courseId)
THEN 1
ELSE 0
END as [CanView]
,cp.[Id]
,cp.[Title]
,cp.[CreatedDate]
,cp.[Duration]
,
CASE WHEN EXISTS (select Id from Order where UserId = @userId and CourseId = @courseId)
THEN cp.[FileId]
ELSE null
END as [FileId]
from Course as c
left join CourseParts cp on cp.CourseId = c.Id
Вы также можете сделать это, переписав запрос, используя объединения для исключения данных. Но учитывая, что у вас уже есть подзапрос и обычный select. Это также должно сработать.