类似于Column Number rather than Column Name但我相信这是不同的,因为那是针对未命名的列,而我的列是命名的,我只是提前不知道名称。
首先,一些背景。我正在创建一个方法,该方法将查询及其参数作为参数,然后运行查询(使用 Dapper)并检查第一行、第一列的值是 1 还是 0。它旨在用作通用验证器数据库。
例如,用户可以输入一个查询,如果某个表中存在某个值,则在唯一行的唯一列中返回 1,否则返回 0。这种方法的用途有意非常广泛,大部分精力都放在编写查询的用户身上(我还应该澄清,在这种情况下,“用户”始终是另一个开发人员,并且使用是在调用此方法的代码中完成的,不是在表单输入上)。
我想查询我的数据库并获取第一行第一列的值,但事先不知道列的名称。理想情况下(虽然我不确定这在 Dapper 调用中是否可行),我还想要求结果中只有一行和一列。当我四处搜索时,我的初始解决方案基于 this帖子的第一个答案,但发现要使其正常工作,我需要知道列的名称:
var dict = connection.Query(query, parameters).ToDictionary(row => (string)row.VALUE);
if(dict.ElementAt(0).Value != 1){
//do stuff
}
我想只添加一个要求,即用户添加一个别名,将第一列命名为某个常量值(在本例中为 VALUE
),但我不想把负担放在如果可能的话,我的用户。
最终我的核心问题是:如何在不知道列名的情况下使用 Dapper 获取数据库中命名列的值? 有人有什么想法吗?
最佳答案
我已经通过在通用查询方法中使用 int 作为类型成功地做到了这一点:
int value = conn.Query<int>(sql,
commandType: CommandType.StoredProcedure).FirstOrDefault();
注意 FirstOrDefault 方法的使用。所以您从数据库中得到 0 或任何值。
关于c# - 在不知道名称的情况下获取第一列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38251000/