我正在尝试使用 Sqlkata 构建 Sql 查询。我能够为一个连接条件构建正确的 sql 查询,但是对于 And Condition 我面临问题
var empDeptQuery = new Query("employee");
empDeptQuery.Select("employee.Name", "dept.Deptname");
empDeptQuery.Join("dept", join => join.On("employee.deptid", "dept.deptid"));
SqlResult empDeptSqlKataQuery = compiler.Compile(empDeptQuery);
Run Code Online (Sandbox Code Playgroud)
最终查询 -empDeptSqlKataQuery.Sql 是
SELECT [employee].[Name], [dept].[Deptname] FROM [employee]
INNER JOIN [dept] ON ([employee].[deptid] = [dept].[deptid])
Run Code Online (Sandbox Code Playgroud)
我想在 join 子句中添加更多条件,如下所示。
SELECT [employee].[Name], [dept].[Deptname] FROM [employee]
INNER JOIN [dept] ON ([employee].[deptid] = [dept].[deptid] And [employee].[empdeptname]=[dept].[departmentName])
Run Code Online (Sandbox Code Playgroud)
我试过这个,但没有得到我的预期
var empDeptQuery = new Query("employee");
empDeptQuery.Select("employee.Name", "dept.Deptname");
empDeptQuery.Join("dept", join => join.On("employee.deptid", "dept.deptid"));
empDeptQuery.Join(empDeptQuery, join => join.On("employee.empdeptname", "dept.departmentName"));
SqlResult empDeptSqlKataQuery = compiler.Compile(empDeptQuery); …
Run Code Online (Sandbox Code Playgroud) 我正在使用SqlKata创建动态SQL查询。我有一个条件列表,存储在数据库中,条件是根据我的业务规则生成的。这是我的代码示例:
var list = new List<Query>();
foreach(var rule in rules){
var q = new Query()
.Where(x=> x.Where("Price", "<", rule.Price).OrWhere("GoodsType", "=", rule.Type));
list.Add(q);
}
Run Code Online (Sandbox Code Playgroud)
现在,我想将此列表项连接在一起,但是Where()扩展的重载都不接受Query
类型参数。有没有办法将where子句连接在一起?
这是我需要生成的预期查询的一部分。
select * from ship_schedule where Path = @path and scheduleDate= @Date
AND (FD.IssueType ='O' OR fd.Path!='ILMTOP' OR (fd.Path='ILMTOP' AND F.carrier !='MAL'))
AND (FD.IssueType ='O' OR fd.Path!='TOPILM' OR (fd.Path='ILMTOP' AND F.carrier !='MAL'))
Run Code Online (Sandbox Code Playgroud)
我需要创建查询的第二行到最后。
我纯粹使用 SqlKata 在 C# 中构建 sql 查询。我想获取我构建的输出Query
,获取原始(编译的)sql 字符串,并针对 SQL 执行它。
我认为这会做到:
var factory = new QueryFactory(null, new SqlServerCompiler());
var query = new Query();
...
var sqlText = factory.Compiler.Compile(query).Sql;
Run Code Online (Sandbox Code Playgroud)
但这给出了:
SELECT TOP (@p0) [AllStarFull].[GameNumber], [AllStarFull].[LeagueId], [AllStarFull].[PlayedInGame] FROM [AllStarFull]
Run Code Online (Sandbox Code Playgroud)
这会引发异常,因为它(@p0)
是一个参数,而不是实际值。
在文档中,它提到了引入,Logger
但我并不真正需要日志记录功能(现在)。
https://sqlkata.com/docs/execution/logging
var db = new QueryFactory(connection, new SqlServerCompiler());
// Log the compiled query to the console
db.Logger = compiled => {
Console.WriteLine(compiled.ToString());
};
var users = db.Query("Users").Get();
Run Code Online (Sandbox Code Playgroud)
有没有办法从Query
填充了所有参数的sql 字符串中获取原始 sql 字符串?
我有一些长时间运行的查询,如果浏览器取消了 API 请求,我想在执行过程中取消这些查询。我正在使用 SqlKata 执行查询,但没有看到取消令牌的参数。我怎样才能取消我的查询?
我想要这样的东西query.GetAsync<T>(cancelationToken: cancelationToken)
我正在寻找将 SqlKata 用于项目。然而,该项目标准的一部分是查询应该能够作为事务执行。有没有办法可以使用 MSSQL 事务执行一个或多个查询?
非常感谢。
我正在使用 SQL,并且在我的数据库中有一个如下所示的表。
Id Remark1 Remark2 Remark3 Remark4
------------------------------------------------
1 AAA BBB CCC DDD
2 EEE FFF GGG HHH
Run Code Online (Sandbox Code Playgroud)
如何使用以下 DTO从Remark*
列中获取所有值IEnumerable<string>
?
class MyDTO
{
public int ID { get; }
public IEnumerable<string> Remarks { get; }
}
Run Code Online (Sandbox Code Playgroud)
注意:我正在使用 SqlKata (Dapper),您也可以在回答时使用它。