Добрый день.
Пример:
EntitySchemaQuery entitySchemaQuery = new EntitySchemaQuery(entitySchema);
entitySchemaQuery.AddColumn("Name").OrderByAsc();
entitySchemaQuery.AddColumn("Significance.Name");
entitySchemaQuery.AddColumn("TariffCategory.Name");
var groupFilter = new EntitySchemaQueryFilterCollection(entitySchemaQuery, LogicalOperationStrict.And);
strong>Здесь делаю фильтр:strong>, поле CreatedOn содержит не только дату и еще время
groupFilter.Add(entitySchemaQuery.CreateFilterWithParameters(FilterComparisonType.GreaterOrEqual,
"CreatedOn", startDate));
мне надо чтобы рассекал время делал проверку только на дату
Sql Запрос примерно такой:
t."Name" AS "TariffCategoryName"
FROM "Account" a
INNER JOIN "SignificanceLevel" s
ON s."Id" = a."SignificanceId"
INNER JOIN "TariffCategory" t
ON t."Id" = a."TariffCategoryId"
WHERE TRUNC(a."CreatedOn") = TO_DATE('11.04.2012', 'dd.mm.yyyy')
Нравится
Здравствуйте.
Можно использовать свойство TrimDateTimeParameterToDate у EntitySchemaQueryFilter, например:
[csharp]
EntitySchema entitySchema = UserConnection.EntitySchemaManager.GetInstanceByName("Account");
EntitySchemaQuery entitySchemaQuery = new EntitySchemaQuery(entitySchema);
entitySchemaQuery.AddColumn("Name").OrderByAsc();
entitySchemaQuery.AddColumn("Significance.Name");
entitySchemaQuery.AddColumn("TariffCategory.Name");
var groupFilter = new EntitySchemaQueryFilterCollection(entitySchemaQuery, LogicalOperationStrict.And);
var filter =(EntitySchemaQueryFilter)entitySchemaQuery.CreateFilterWithParameters(FilterComparisonType.Equal, "CreatedOn", startDate);
filter.TrimDateTimeParameterToDate = true;
groupFilter.Add(filter);
[/csharp]
Приблизительный вид получившегося sql запроса:
[sql]
SELECT a."Name" AS "AccountName", s."Name" AS "SignificanceName",
t."Name" AS "TariffCategoryName"
FROM "Account" a
INNER JOIN "SignificanceLevel" s
ON s."Id" = a."SignificanceId"
INNER JOIN "TariffCategory" t
ON t."Id" = a."TariffCategoryId"
WHERE (a."CreatedOn" >= TO_TIMESTAMP('2012-04-11 12:00:00.000', 'YYYY-MM-DD HH24:MI:SS.FF3') AND a."CreatedOn" < TO_TIMESTAMP('2012-04-12 12:00:00.000', 'YYYY-MM-DD HH24:MI:SS.FF3'))
[/sql]
"Серебрянский Глеб Игоревич" написал:Здравствуйте.
Можно использовать свойство TrimDateTimeParameterToDate у EntitySchemaQueryFilter, например:
EntitySchema entitySchema = UserConnection.EntitySchemaManager.GetInstanceByName("Account");
EntitySchemaQuery entitySchemaQuery = new EntitySchemaQuery(entitySchema);
entitySchemaQuery.AddColumn("Name").OrderByAsc();
entitySchemaQuery.AddColumn("Significance.Name");
entitySchemaQuery.AddColumn("TariffCategory.Name");
var groupFilter = new EntitySchemaQueryFilterCollection(entitySchemaQuery, LogicalOperationStrict.And);
var filter =(EntitySchemaQueryFilter)entitySchemaQuery.CreateFilterWithParameters(FilterComparisonType.Equal, "CreatedOn", startDate);
filter.TrimDateTimeParameterToDate = true;
groupFilter.Add(filter);Приблизительный вид получившегося sql запроса:
SELECT a."Name" AS "AccountName", s."Name" AS "SignificanceName",
t."Name" AS "TariffCategoryName"
FROM "Account" a
INNER JOIN "SignificanceLevel" s
ON s."Id" = a."SignificanceId"
INNER JOIN "TariffCategory" t
ON t."Id" = a."TariffCategoryId"
WHERE (a."CreatedOn" >= TO_TIMESTAMP('2012-04-11 12:00:00.000', 'YYYY-MM-DD HH24:MI:SS.FF3') AND a."CreatedOn" < TO_TIMESTAMP('2012-04-12 12:00:00.000', 'YYYY-MM-DD HH24:MI:SS.FF3'))
Спасибо,а в следующим коде TRUNC как сделать?
[csharp]
Select Sel = new Select(userConnection)
.Column("a", "Name").As("AccountName")
.Column("s", "Name").As("SignificanceName")
.Column("t", "Name").As("TariffCategoryName")
.From("Account").As("a")
.InnerJoin("SignificanceLevel").As("s").On("s", "Id").IsEqual("a", "SignificanceId")
.InnerJoin("TariffCategory").As("t").On("t", "Id").IsEqual("a", "TariffCategoryId")
.Where("a", "BusinessTypeId").IsEqual(new QueryParameter(new Guid("{7FBD1F94-F36B-1410-8E87-485B39B216BB}")))
.And("a", "CreatedOn").IsGreaterOrEqual(new QueryParameter(startDate))
.And("a", "CreatedOn").IsLessOrEqual(new QueryParameter(endDate))
as Select;
[/csharp]
Непосредственно Select данной функциональности не содержит, так как он в отличии от EntitySchemaQuery не проводит дополнительного анализа запроса, а просто строит запрос как есть. Если нужно использовать TRUNC, и по каким-то причинам нельзя использовать EntitySchemaQuery, можно сделать так:
[csharp]
string sqlText = "SELECT a.\"Name\"" AS \""AccountName\"""" +
[quote="Серебрянский Глеб Игоревич"]
Непосредственно Select данной функциональности не содержит, так как он в отличии от EntitySchemaQuery не проводит дополнительного анализа запроса, а просто строит запрос как есть. Если нужно использовать TRUNC, и по каким-то причинам нельзя использовать EntitySchemaQuery, можно сделать так:
string sqlText = "SELECT a.\"Name\"" AS \""AccountName\"""" +
Права доступа накладываются автоматически только при использовании EntitySchemaQuery. Select генерирует строго тот запрос, который был с его помощью сконструирован. Если нужно автоматическое наложение прав доступа, и автоматическое игнорирование времени в параметре дата/время, необходимо использовать EntitySchemaQuery.
"Серебрянский Глеб Игоревич" написал:Права доступа накладываются автоматически только при использовании EntitySchemaQuery. Select генерирует строго тот запрос, который был с его помощью сконструирован. Если нужно автоматическое наложение прав доступа, и автоматическое игнорирование времени в параметре дата/время, необходимо использовать EntitySchemaQuery.
я сделал таким образом:
[csharp]
EntitySchema entitySchema = userConnection.EntitySchemaManager.GetInstanceByName("Account");
EntitySchemaQuery entitySchemaQuery = new EntitySchemaQuery(entitySchema);
var AccountName = entitySchemaQuery.AddColumn("Name").Name;
var SignificanceName = entitySchemaQuery.AddColumn("=Significance.Name").Name;
var TariffCategoryName = entitySchemaQuery.AddColumn("=TariffCategory.Name").Name;
var groupFilter = new EntitySchemaQueryFilterCollection(entitySchemaQuery, LogicalOperationStrict.And);
groupFilter.Add(entitySchemaQuery.CreateFilterWithParameters(FilterComparisonType.Equal,
"BusinessType", Guid.Parse(businessTypeId)));
if((startDate.ToString("dd.MM.yyyy") != DateTime.MinValue.ToString("dd.MM.yyyy"))&& (endDate.ToString("dd.MM.yyyy") != DateTime.MinValue.ToString("dd.MM.yyyy")))
{
var FilterDateGE =(EntitySchemaQueryFilter)entitySchemaQuery.CreateFilterWithParameters(FilterComparisonType.GreaterOrEqual, "CreatedOn", startDate);
FilterDateGE.TrimDateTimeParameterToDate = true;
var FilterDateLE =(EntitySchemaQueryFilter)entitySchemaQuery.CreateFilterWithParameters(FilterComparisonType.LessOrEqual, "CreatedOn", endDate);
FilterDateLE.TrimDateTimeParameterToDate = true;
groupFilter.Add(FilterDateGE);
groupFilter.Add(FilterDateLE);
string lblSectionDate = "Период с " + startDate.ToString("dd.MM.yyyy") +" по "+endDate.ToString("dd.MM.yyyy");
}
[/csharp]
Получаем запрос, я здесь не вижу как TRUNC("Account"."CreatedOn") :
[sql]
SELECT
"Account"."Name" "Name",
"Significance"."Name" "Significance.Name",
"TariffCategory"."Name" "TariffCategory.Name"
FROM
"PRODDB"."Account" "Account",
"PRODDB"."SignificanceLevel" "Significance",
"PRODDB"."TariffCategory" "TariffCategory"
WHERE
(1 = 1
AND ("Account"."BusinessTypeId" = '{7FBD1F94-F36B-1410-8E87-485B39B216BB}'
AND "Account"."CreatedOn" >= :P2
AND "Account"."CreatedOn" <= :P3))
AND "Significance"."Id" = "Account"."SignificanceId"
AND "TariffCategory"."Id" = "Account"."TariffCategoryId"
[/sql]