c# - 使用 SQLKata 在插入语句中选择语句
问题描述
我正在尝试在 C# 的 SQLKata 中复制此 SQL Server 查询:
insert into ChannelData (ChannelID, DataSource, X, Y)
values ((select ID
from Channels
where Channel = @0 and Revision = @1), @2, @3, @4)
我正在进入ChannelData
表格ChannelData
,但也将ChannelID
表格中的内容存储Channels
在其中。我需要检索用户输入的特定频道和修订号的 ID。我该如何正确地做到这一点?
到目前为止,我已经尝试过了,但这是我得到的最接近的
query = new Query("ChannelData").AsInsert(new[] { "ChannelID, DataSource, X, Y" }, new Query("Channels").Select("ID", "@2 as DataSource", "@3 as X", "@4 as Y").Where("Channel", "=", "N01E").Where("Revision", "=", 0));
这可以在一个 SQL 查询中完成,还是我必须在另一个调用中获取 ID?
解决方案
这样的事情应该这样做:
var compiler = new SqlServerCompiler();
var query =
new Query("ChannelData")
.AsInsert(
new[] { "ChannelID", "DataSource", "X","Y" },
new Query("Channels")
.Select("ChannelID", "DataSource", "X", "Y")
.Where("Channel","N01E")
.Where("Revision",0)
);
var rawSql = compiler.Compile(query).RawSql;
这将返回:
INSERT INTO [ChannelData] ([ChannelID], [DataSource], [X], [Y])
SELECT [ChannelID], [DataSource], [X], [Y]
FROM [Channels] WHERE [Channel] = ? AND [Revision] = ?
其中,应该完成你想要的。如果您想显式使用上述语法,则需要先获取值,然后再构建查询。请记住,您可以拥有的参数数量是最大的(我认为是 1000 个)。
推荐阅读
- javascript - TypeError:无法读取未定义的属性“setValues”| 反应
- python - 在 MultiPolygon 中用匀称填充一个洞 - 荷兰 2 位邮政编码
- c# - 静态类中的 Asp.Net Core 配置
- lua - 我想在 AwesomeWM 的第二个屏幕上打开一个程序,但前提是第二个屏幕可用
- java - 构建表示前缀表达式的树的算法
- assembly - 如何在汇编中进行直接内存寻址
- visual-studio-code - 在 vscode 的基于 json 的设置编辑器中对设置进行排序
- ios - 方法不是公认的客观 c 方法
- gitlab - 上次部署信息不可用 - cpanel
- laravel - 如何将可选 ID 从 Route 传递给 Laravel 控制器?