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

时间:2015-06-15 05:58:57

标签: c# dapper

我尝试使用dapper执行以下查询,但它始终返回空结果集。首先,我尝试删除WHERE子句以隔离问题,但这不起作用。之后,我在C.NAME子句中的SELECT列中添加了别名,但也没有用。

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

2 个答案:

答案 0 :(得分:1)

说实话,我不确定你是否正确使用Dapper,因为你选择了命名列并将其映射为简单的string - 我相信Dapper并没有看到&#39; Name&#39;财产无声地失败。我想你应该尝试使用强类型对象Query<T>或使用Query<dynamic>来避免不必要的类创建。

答案 1 :(得分:1)

所以,我把它放在一边去做其他事情,在我回来试图解决我的问题之后,一切都运转正常。我没有改变我的代码中的任何内容,令人惊讶的是它现在正在工作。

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

为了澄清,将字符串用作返回数据类型是完美的,可以在sql参数中简单地连接到Query方法,或者根本不使用返回列的别名(仅当所有列都匹配时) C#属性名称或者您只有一个指向像我这样的字符串的列。