Добрый день.
Пример:
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, например:
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'))
"Серебрянский Глеб Игоревич" написал:Здравствуйте.
Можно использовать свойство 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 как сделать?
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;
Непосредственно Select данной функциональности не содержит, так как он в отличии от EntitySchemaQuery не проводит дополнительного анализа запроса, а просто строит запрос как есть. Если нужно использовать TRUNC, и по каким-то причинам нельзя использовать EntitySchemaQuery, можно сделать так:
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.
я сделал таким образом:
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"); }
Получаем запрос, я здесь не вижу как TRUNC("Account"."CreatedOn") :
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"