SEARCH CFQL 方法中的可选参数不是 varchar 类型
Optionnal parameter in SEARCH CFQL method not of type varchar
是否可以有一个搜索功能,允许传递 varchar 以外的可选参数(即 DateTime、decimal..)?
我需要搜索某个日期范围内的行。用户应该能够仅从一个日期搜索,或者直到一个日期,或者甚至在一个从-到范围内搜索。
我的方法是创建一个带有日期参数的搜索方法。这些已在 CFE 中正确转换为 DateTime 对象,但我无法传递空值。
我设法创建了一个包含未检查部分的 SEARCH 方法,但这些部分在函数主体中不会成为可选部分。
如何将 fromDate 和 toDate 参数设为可选?
CFQL 正文是
SEARCH(string amount, string fromDate, string toDate, string otherEntityId, date date) WHERE [$Entity::Date$ >= CAST(@fromDate AS DATE)] AND [$Entity::Date$ <= CAST(@toDate AS DATE)] AND OtherEntity.OtherEntityId = @otherEntityId AND Amount = @amount and date = @date
正文生成过程如下。注意未选中的部分不是可选的
CREATE PROCEDURE [Schema].[Entity_NameOfProcedure]
(
@amount [nvarchar] (256) = NULL,
@fromDate [nvarchar] (256) = NULL,
@toDate [nvarchar] (256) = NULL,
@OtherEntityId [nvarchar] (256) = NULL,
@date [date] = NULL,
@_orderBy0 [nvarchar] (64) = NULL,
@_orderByDirection0 [bit] = 0
)
AS
SET NOCOUNT ON
DECLARE @sql nvarchar(max), @paramlist nvarchar(max)
SELECT @sql=
'SELECT DISTINCT * /*on purpose for Whosebug */
FROM [Schema].[Entity]
LEFT OUTER JOIN [Schema].[OtherEntity] ON ([Schema].[Entity].[Entity_OtherEntity_OtherEntityId] = [Schema].[OtherEntity].[OtherEntity_OtherEntityId])
WHERE (([Entity].[Entity_Date] >= CAST(@fromDate AS DATE) AND ([Entity].[Entity_Date] <= CAST(@toDate AS DATE) AND ((1 = 1) AND ((1 = 1) AND (([Schema].[OtherEntity].[OtherEntity_NumberInt] LIKE ''6%'') AND (1 = 1)))))) AND (1 = 1))'
SELECT @paramlist = '@amount nvarchar (256),
@fromDate nvarchar (256),
@toDate nvarchar (256),
@otherEntityId nvarchar (256),
@date date,
@_orderBy0 nvarchar (64),
@_orderByDirection0 bit'
IF @amount IS NOT NULL
SELECT @sql = @sql + ' AND (([Schema].[Entity].[Entity_amount] = @amount))'
IF @otherEntityId IS NOT NULL
SELECT @sql = @sql + ' AND (([Schema].[OtherEntity].[OtherEntity_OtherEntityId] = @OtherEntityId))'
IF @date IS NOT NULL
SELECT @sql = @sql + ' AND (([Schema].[Entity].[Entity_Date] = @date))'
EXEC sp_executesql @sql, @paramlist,
@amount,
@fromDate,
@toDate,
@OtherEntityId,
@date,
@_orderBy0,
@_orderByDirection0
RETURN
GO
感谢您的回答
您可以创建带有可选日期参数的 SEARCH
方法:
SEARCH(date fromDate, date toDate)
WHERE CreationDate >= @fromDate AND CreationDate <= @toDate
这会生成以下内容 SQL:
SELECT @sql=
'SELECT DISTINCT [Employee_Id], [Employee_FirstName], [Employee_CreationDate]
FROM [Employee]
WHERE (1 = 1)'
SELECT @paramlist = '@fromDate datetime, @toDate datetime'
IF @fromDate IS NOT NULL
SELECT @sql = @sql + ' AND (([Employee_CreationDate] >= @fromDate))'
IF @toDate IS NOT NULL
SELECT @sql = @sql + ' AND (([Employee_CreationDate] <= @toDate))'
fromDate
和 toDate
参数在生成的 BOM 中不可为空。但是,如果您使用默认值,默认值等于 CodeFluentPersistence.DefaultDateTimeValue
(More about default values),NULL
将被发送到存储过程。
如果您更喜欢 DateTime?
,只需将参数类型从 date
更改为 date?
SEARCH(date? fromDate, date? toDate)
WHERE CreationDate >= @fromDate AND CreationDate <= @toDate
生成以下 C# 方法:
public static EmployeeCollection Search(DateTime? fromDate, DateTime? toDate)
是否可以有一个搜索功能,允许传递 varchar 以外的可选参数(即 DateTime、decimal..)?
我需要搜索某个日期范围内的行。用户应该能够仅从一个日期搜索,或者直到一个日期,或者甚至在一个从-到范围内搜索。
我的方法是创建一个带有日期参数的搜索方法。这些已在 CFE 中正确转换为 DateTime 对象,但我无法传递空值。
我设法创建了一个包含未检查部分的 SEARCH 方法,但这些部分在函数主体中不会成为可选部分。
如何将 fromDate 和 toDate 参数设为可选?
CFQL 正文是
SEARCH(string amount, string fromDate, string toDate, string otherEntityId, date date) WHERE [$Entity::Date$ >= CAST(@fromDate AS DATE)] AND [$Entity::Date$ <= CAST(@toDate AS DATE)] AND OtherEntity.OtherEntityId = @otherEntityId AND Amount = @amount and date = @date
正文生成过程如下。注意未选中的部分不是可选的
CREATE PROCEDURE [Schema].[Entity_NameOfProcedure]
(
@amount [nvarchar] (256) = NULL,
@fromDate [nvarchar] (256) = NULL,
@toDate [nvarchar] (256) = NULL,
@OtherEntityId [nvarchar] (256) = NULL,
@date [date] = NULL,
@_orderBy0 [nvarchar] (64) = NULL,
@_orderByDirection0 [bit] = 0
)
AS
SET NOCOUNT ON
DECLARE @sql nvarchar(max), @paramlist nvarchar(max)
SELECT @sql=
'SELECT DISTINCT * /*on purpose for Whosebug */
FROM [Schema].[Entity]
LEFT OUTER JOIN [Schema].[OtherEntity] ON ([Schema].[Entity].[Entity_OtherEntity_OtherEntityId] = [Schema].[OtherEntity].[OtherEntity_OtherEntityId])
WHERE (([Entity].[Entity_Date] >= CAST(@fromDate AS DATE) AND ([Entity].[Entity_Date] <= CAST(@toDate AS DATE) AND ((1 = 1) AND ((1 = 1) AND (([Schema].[OtherEntity].[OtherEntity_NumberInt] LIKE ''6%'') AND (1 = 1)))))) AND (1 = 1))'
SELECT @paramlist = '@amount nvarchar (256),
@fromDate nvarchar (256),
@toDate nvarchar (256),
@otherEntityId nvarchar (256),
@date date,
@_orderBy0 nvarchar (64),
@_orderByDirection0 bit'
IF @amount IS NOT NULL
SELECT @sql = @sql + ' AND (([Schema].[Entity].[Entity_amount] = @amount))'
IF @otherEntityId IS NOT NULL
SELECT @sql = @sql + ' AND (([Schema].[OtherEntity].[OtherEntity_OtherEntityId] = @OtherEntityId))'
IF @date IS NOT NULL
SELECT @sql = @sql + ' AND (([Schema].[Entity].[Entity_Date] = @date))'
EXEC sp_executesql @sql, @paramlist,
@amount,
@fromDate,
@toDate,
@OtherEntityId,
@date,
@_orderBy0,
@_orderByDirection0
RETURN
GO
感谢您的回答
您可以创建带有可选日期参数的 SEARCH
方法:
SEARCH(date fromDate, date toDate)
WHERE CreationDate >= @fromDate AND CreationDate <= @toDate
这会生成以下内容 SQL:
SELECT @sql=
'SELECT DISTINCT [Employee_Id], [Employee_FirstName], [Employee_CreationDate]
FROM [Employee]
WHERE (1 = 1)'
SELECT @paramlist = '@fromDate datetime, @toDate datetime'
IF @fromDate IS NOT NULL
SELECT @sql = @sql + ' AND (([Employee_CreationDate] >= @fromDate))'
IF @toDate IS NOT NULL
SELECT @sql = @sql + ' AND (([Employee_CreationDate] <= @toDate))'
fromDate
和 toDate
参数在生成的 BOM 中不可为空。但是,如果您使用默认值,默认值等于 CodeFluentPersistence.DefaultDateTimeValue
(More about default values),NULL
将被发送到存储过程。
如果您更喜欢 DateTime?
,只需将参数类型从 date
更改为 date?
SEARCH(date? fromDate, date? toDate)
WHERE CreationDate >= @fromDate AND CreationDate <= @toDate
生成以下 C# 方法:
public static EmployeeCollection Search(DateTime? fromDate, DateTime? toDate)