使用 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

使用 JOIN 子句的查询始终使用 Dapper 返回空结果集

实说,我不确定您是否正确使用Dapper,因为您正在选择命名列并将其映射到简单的string - 我相信Dapper不会看到"名称"属性,因为无声地失败。我想你应该尝试使用强类型对象Query<T>或使用Query<dynamic>来避免不必要的类创建。

所以,我把这个放在一边,去做别的事情,在我回来尝试解决我的问题之后,一切正常。我没有在我的代码中更改任何内容,令人惊讶的是它现在正在工作。

我不知道我的 MiTeC Interbase 查询中的挂起事务是否有可能阻止我查看数据库中的当前记录。我尝试再次模拟它,现在它总是返回我需要的记录(总比没有好,呵呵)。

为澄清起见,使用字符串作为返回数据类型,在 sql 参数中对 Query 方法进行简单的联接,或者根本不对返回列使用别名(仅当所有列都与您的 C# 属性名称匹配时,或者您只有一个列定向到像我这样的字符串)。