使用 JOIN 子句的查询始终使用 Dapper 返回空结果集
本文关键字:Dapper 返回 结果 子句 JOIN 查询 使用 | 更新日期: 2023-09-27 17:56:06
我尝试使用 dapper 执行以下查询,但它总是返回一个空的结果集。首先,我试图删除WHERE
子句以隔离问题,但这不起作用。之后,我在 SELECT
子句的 C.NAME
列中添加了一个别名,但也没有工作。
private const string SelectClaims =
@"SELECT C.NAME FROM CLAIMS C
INNER JOIN USERS_CLAIMS UC ON C.ID = UC.ID_CLAIM
WHERE UC.ID_USER = @Id";
using (var conn = new FbConnection(connectionString))
{
var claims = conn.Query<string>(SelectClaims, new { user.Id });
return claims;
}
如果我在这里替换上面的查询,一切正常:
SELECT NAME FROM CLAIMS
老
实说,我不确定您是否正确使用Dapper,因为您正在选择命名列并将其映射到简单的string
- 我相信Dapper不会看到"名称"属性,因为无声地失败。我想你应该尝试使用强类型对象Query<T>
或使用Query<dynamic>
来避免不必要的类创建。
所以,我把这个放在一边,去做别的事情,在我回来尝试解决我的问题之后,一切正常。我没有在我的代码中更改任何内容,令人惊讶的是它现在正在工作。
我不知道我的 MiTeC Interbase 查询中的挂起事务是否有可能阻止我查看数据库中的当前记录。我尝试再次模拟它,现在它总是返回我需要的记录(总比没有好,呵呵)。
为澄清起见,使用字符串作为返回数据类型,在 sql 参数中对 Query 方法进行简单的联接,或者根本不对返回列使用别名(仅当所有列都与您的 C# 属性名称匹配时,或者您只有一个列定向到像我这样的字符串)。