是否可以在 sqlkata 中查询参数化的表值函数?

Posted

技术标签:

【中文标题】是否可以在 sqlkata 中查询参数化的表值函数?【英文标题】:Is it possible to query a parametrized table-valued function in sqlkata? 【发布时间】:2018-12-11 08:44:31 【问题描述】:

我有一个这样的 SQL 表值函数:

创建函数 [Foo] (@bar VARCHAR(255)) 返回@结果表 ( [第 1 列] INT, [第 2 列] INT, [第 3 列] INT, [第 4 列] INT ) ..

我希望能够在 SqlKata 中对它执行查询,方法是使用适当的参数调用函数。

有可能吗?如果有怎么办?

注意:这个问题在某种程度上与 is there any way to create query including function in projection and outer apply in sqlkata? 相关,但我也需要传递一个参数。

【问题讨论】:

【参考方案1】:

最简单的方法是使用FromRaw

new Query().FromRaw("[Foo](?)", bar).Select("Column")

附注:使用QueryFactory 比自己执行查询要容易得多。

var result = db.Query().FromRaw("[Foo](?)", bar).Select("Column").Get();

【讨论】:

能否更改查询条件中的参数名称? query.WhereIn(Product, Value) 这将变为 WHERE ([Product].[Name] = @p0) 但我需要正确的参数名称,例如 WHERE ([Product].[Name] = @productName)【参考方案2】:

我设法获得了像 CTE 一样访问我的函数的结果,即:使用 WithRaw 和别名:

var query = new Query("MyAlias") .WithRaw("MyAlias", "Select Column1 from [Foo](@bar)" ) .Select("Column1"); var 已编译 = _compiler.Compile(query); var result1 = connection.Query(compiled.Sql, new bar = bar) .ToList();

【讨论】:

以上是关于是否可以在 sqlkata 中查询参数化的表值函数?的主要内容,如果未能解决你的问题,请参考以下文章

无法访问 sql 中查询的表值参数

sql中的表值函数与标量值函数区别与用法

表值参数可以是临时的吗

在 SQL Server 的视图中使用表值函数

Entity Framework 4 表值函数

涉及运算的表值参数问题