Ограничения на части даты
Ограничения на части даты используются, когда необходимо получить данные по части даты.
Функции для получения частей даты доступны в ExternalLangDef. В примерах ниже будем использовать следующий код:
var langdef = ExternalLangDef.LanguageDef;
var order = LoadingCustomizationStruct.GetSimpleStruct(typeof (Заказ), Заказ.Views.ЗаказL);
Ограничение на год (funcYearPart)
Найти заказы, оформленные в 2014 году.
SQL-выражение выглядит следующим образом:
SELECT * FROM [dbo].[Заказ] WHERE YEAR([ДатаВыдачи]) = 2014
Через ExternalLangDef
order.LimitFunction = langdef.GetFunction(langdef.funcEQ,
langdef.GetFunction(langdef.funcYearPart, new VariableDef(langdef.DateTimeType, Information.ExtractPropertyPath<Заказ>(x => x.ДатаВыдачи))),
"2014");
Ограничение на месяц (funcMonthPart)
Найти заказы, оформленные в мае.
SQL-выражение выглядит следующим образом:
SELECT * FROM [dbo].[Заказ] WHERE Month([ДатаВыдачи]) = 05
Через ExternalLangDef
order.LimitFunction = langdef.GetFunction(langdef.funcEQ,
langdef.GetFunction(langdef.funcMonthPart, new VariableDef(langdef.DateTimeType, Information.ExtractPropertyPath<Заказ>(x => x.ДатаВыдачи))),
"05");
Ограничение на день (funcDayPart)
Найти заказы, оформленные 13 числа.
SQL-выражение выглядит следующим образом:
SELECT * FROM [dbo].[Заказ] WHERE Day([ДатаВыдачи]) = 13
Через ExternalLangDef
order.LimitFunction = langdef.GetFunction(langdef.funcEQ,
langdef.GetFunction(langdef.funcDayPart, new VariableDef(langdef.DateTimeType, Information.ExtractPropertyPath<Заказ>(x => x.ДатаВыдачи))),
"13");
Ограничение на час (funcHHPart)
Найти заказы, оформленные в 10 утра.
SQL-выражение выглядит следующим образом:
SELECT * FROM [dbo].[Заказ] WHERE DatePart(hh, [ДатаВыдачи]) = 10
Через ExternalLangDef
order.LimitFunction = langdef.GetFunction(langdef.funcEQ,
langdef.GetFunction(langdef.funcHHPart, new VariableDef(langdef.DateTimeType, Information.ExtractPropertyPath<Заказ>(x => x.ДатаВыдачи))),
"10");
Ограничение на минуты (funcMIPart)
Найти заказы, оформленные в 20 минут.
SQL-выражение выглядит следующим образом:
SELECT * FROM [dbo].[Заказ] WHERE DatePart(MINUTE, [ДатаВыдачи]) = 20
Через ExternalLangDef
order.LimitFunction = langdef.GetFunction(langdef.funcEQ,
langdef.GetFunction(langdef.funcMIPart, new VariableDef(langdef.DateTimeType, Information.ExtractPropertyPath<Заказ>(x => x.ДатаВыдачи))),
"20");
Если необходимо точное время, то ограничение будет выглядеть так:
order.LimitFunction = langdef.GetFunction(
langdef.funcAND,
langdef.GetFunction(
langdef.funcEQ,
langdef.GetFunction(
langdef.funcHHPart,
new VariableDef(langdef.DateTimeType, Information.ExtractPropertyPath<Заказ>(x => x.ДатаВыдачи))),
10),
langdef.GetFunction(
langdef.funcEQ,
langdef.GetFunction(
langdef.funcMIPart,
new VariableDef(langdef.DateTimeType, Information.ExtractPropertyPath<Заказ>(x => x.ДатаВыдачи))),
20));
Ограничение на дату (funcOnlyDate)
Вывести тех, у кого сегодня день рождения.
var langDef = new ExternalLangDef();
Function function = langDef.GetFunction(langDef.funcEQ,
langDef.GetFunction(langDef.funcOnlyDate,
new VariableDef(langDef.DateTimeType, Information.ExtractPropertyPath<Человек>(x => x.ДатаРождения))),
langDef.GetFunction(langDef.funcOnlyDate,
langDef.GetFunction("TODAY")));
Ограничение на время (funcOnlyDate)
Вывести тех, кто родился в 01:00:00.
var langDef = new ExternalLangDef();
Function function = langDef.GetFunction(langDef.funcEQ,
langDef.GetFunction(langDef.funcOnlyTime,
new VariableDef(langDef.DateTimeType, Information.ExtractPropertyPath<Человек>(x => x.ДатаРождения))),
langDef.GetFunction(langDef.funcOnlyTime,
DateTime.Parse("01:00:00")));
Ограничение на день недели (funcDayOfWeek)
Функция, возвращающая день недели числом. (1 = Понедельник, …, 7 = Воскресенье)
Вывести только те числа которые попали на понедельник.
// Создаем ограничение на объект.
lcs.LimitFunction =
// Ограничение, что функция возвращает объекты.
ldef.GetFunction(
// В которых значения параметра 1 (=) значению параметра 2.
ldef.funcEQ,
// Параметр 1: получаем даты и преобразовываем её в число.
ldef.GetFunction(
ldef.funcDayOfWeek,
new VariableDef(ldef.DateTimeType,
Information.ExtractPropertyPath<FullTypesMainAgregator>(x => x.PoleDateTime))),
// Параметр 2.
1);
Ограничение на день недели (funcDayOfWeekZeroBased)
Функция, возвращающая день недели числом. (0 = Воскресенье, 1 = Понедельник, …)
Найти все заказы которые были сделаны в Воскресенье.
// Создаем ограничение на объект.
LimitFunction =
// Ограничение, что функция возвращает объекты.
ldef.GetFunction(
// В которых значения параметра 1 (=) значению параметра 2.
ldef.funcEQ,
// Параметр 1: Ограничение, что из поля "Дата", возвращаются день недели числом.
ldef.GetFunction(ldef.funcDayOfWeekZeroBased, new VariableDef(ldef.DateTimeType, "Дата")),
// Параметр 2: Возвращающийся день недели числом должен быть = 0 (Воскресенье).
0)
Полный аналог SQL функции dateadd (funcDateAdd)
Найти все заказы которые были сделаны за все время, кроме тех которые были сделаны за последний год.
// Создаем ограничение на объект.
LimitFunction =
// Ограничение, что функция возвращает объекты.
ldef.GetFunction(
// В которых значения параметра 1 (<) значению параметра 2.
ldef.funcL,
// Параметр 1: Ограничение, что из поля "Дата", возвращаются дата значение года, которой увеличено на 1.
ldef.GetFunction(
ldef.funcDateAdd, // Полный аналог SQL функции dateadd.
ldef.GetFunction(ldef.paramYearDIFF),
1,
new VariableDef(ldef.DateTimeType, "Дата")),
// Параметр 2: Ограничение, что из сегодняшней даты, возвращаются только дату(без времени).
ldef.GetFunction(ldef.funcOnlyDate, DateTime.Now));
Параметры для работы с датой
paramTODAY - параметр для получения сегодняшней даты
Найти все заказы которые были сделаны за прошедшие месяцы (+ текущий).
// Создаем ограничение на объект ("Дата"<=paramTODAY).
LimitFunction =
// Ограничение, что функция возвращает объекты.
ldef.GetFunction(
// В которых значения параметра 1 (<=) значению параметра 2.
ldef.funcLEQ,
// Параметр 1: Ограничение, что из поля "Дата", возвращаются только значения месяца.
ldef.GetFunction(ldef.funcMonthPart, new VariableDef(ldef.DateTimeType, "Дата")),
// Параметр 2: Ограничение, что из сегодняшней даты, возвращаются только значения месяца.
ldef.GetFunction(ldef.funcMonthPart, ldef.GetFunction(ldef.paramTODAY)));
paramYearDIFF - параметр для получения значения года от даты
Найти все заказы которые были сделаны за все время, кроме тех которые были сделаны за последний год.
// Создаем ограничение на объект.
lcs.LimitFunction =
// Ограничение, что функция возвращает объекты.
ldef.GetFunction(
// В которых значения параметра 1 (<) значению параметра 2.
ldef.funcL,
// Параметр 1: Ограничение, что из поля "Дата", возвращается значение года даты, которое увеличено на 1.
ldef.GetFunction(
ldef.funcDateAdd,
ldef.GetFunction(ldef.paramYearDIFF),
1,
new VariableDef(ldef.DateTimeType, Information.ExtractPropertyPath<FullTypesMainAgregator>(x => x.PoleDateTime))),
// Параметр 2: Ограничение, что из сегодняшней даты, возвращаются только дату(без времени).
ldef.GetFunction(ldef.funcOnlyDate, DateTime.Now));
paramMonthDIFF - параметр для получения значения месяца от даты
Найти все заказы которые были сделаны за все время, кроме тех которые были сделаны за последний месяц.
// Создаем ограничение на объект.
lcs.LimitFunction =
// Ограничение, что функция возвращает объекты.
ldef.GetFunction(
// В которых значения параметра 1 (<) значению параметра 2.
ldef.funcL,
// Параметр 1: Ограничение, что из поля PoleDateTime, возвращается значение месяца даты, которое увеличено на 1.
ldef.GetFunction(
ldef.funcDateAdd,
ldef.GetFunction(ldef.paramMonthDIFF),
1,
new VariableDef(ldef.DateTimeType, Information.ExtractPropertyPath<FullTypesMainAgregator>(x => x.PoleDateTime))),
// Параметр 2: Ограничение, что из сегодняшней даты, возвращаются только дату(без времени).
ldef.GetFunction(ldef.funcOnlyDate, DateTime.Now));
paramWeekDIFF - параметр для получения значения недели от даты
Найти все заказы которые были сделаны за все время, кроме тех которые были сделаны за последнюю неделю.
// Создаем ограничение на объект.
lcs.LimitFunction =
// Ограничение, что функция возвращает объекты.
ldef.GetFunction(
// В которых значения параметра 1 (<) значению параметра 2.
ldef.funcL,
// Параметр 1: Ограничение, что из поля PoleDateTime, возвращается значение недели даты, которое увеличено на 1.
ldef.GetFunction(
ldef.funcDateAdd,
ldef.GetFunction(ldef.paramWeekDIFF),
1,
new VariableDef(ldef.DateTimeType, Information.ExtractPropertyPath<FullTypesMainAgregator>(x => x.PoleDateTime))),
// Параметр 2: Ограничение, что из сегодняшней даты, возвращаются только дату(без времени).
ldef.GetFunction(ldef.funcOnlyDate, DateTime.Now));
paramQuarterDIFF - параметр для получения значения четверти от даты
Найти все заказы которые были сделаны за все время, кроме тех которые были сделаны за последнюю четверть.
// Создаем ограничение на объект.
lcs.LimitFunction =
// Ограничение, что функция возвращает объекты.
ldef.GetFunction(
// В которых значения параметра 1 (<) значению параметра 2.
ldef.funcL,
// Параметр 1: Ограничение, что из поля PoleDateTime, возвращается значение четверти даты, которое увеличено на 1.
ldef.GetFunction(
ldef.funcDateAdd,
ldef.GetFunction(ldef.paramQuarterDIFF),
1,
new VariableDef(ldef.DateTimeType, Information.ExtractPropertyPath<FullTypesMainAgregator>(x => x.PoleDateTime))),
// Параметр 2: Ограничение, что из сегодняшней даты, возвращаются только дату(без времени).
ldef.GetFunction(ldef.funcOnlyDate, DateTime.Now));
paramDayDIFF - параметр для получения значения дня от даты
Найти все заказы которые были сделаны за все время, кроме тех которые были сделаны за последние три дня.
// Создаем ограничение на объект.
LimitFunction =
// Ограничение, что функция возвращает объекты.
ldef.GetFunction(
// В которых значения параметра 1 (<) значению параметра 2.
ldef.funcL,
// Параметр 1: Ограничение, что из Даты берется только дни и их количество увеличивается на 3.
ldef.GetFunction(
ldef.funcDateAdd, // Полный аналог SQL функции dateadd.
ldef.GetFunction(ldef.paramDayDIFF),
3,
new VariableDef(ldef.DateTimeType, Information.ExtractPropertyPath<FullTypesMainAgregator>(x => x.PoleDateTime))),
// Параметр 2: Ограничение, что из сегодняшней даты, возвращаются только дату(без времени).
ldef.GetFunction(ldef.funcOnlyDate, DateTime.Now));