如何将DapperRow转换为Dictionary<string,string>

6
我有一个返回Dapper Row的IEnumerable方法。 enter image description here 但是我尝试访问数据而不将其强制转换为特定类,结果得到了null值。 enter image description here
2个回答

8
假设您正在连接到一个SQL数据库。
    public List<IDictionary<string, object>> DapperSelect(string connectionString, string query, object parameters)
    {
        using (var connection = new SqlConnection(connectionString))
        {
            var result = connection.Query(query, parameters).ToList();

            return result.Select(x => (IDictionary<string, object>)x).ToList();
        }
    }

我认为你不应该将结果转换为IDictionary<string, string>,因为这并不会产生你想要的预期效果,字典中的每个项可能是布尔值、整型、双精度等类型......
但如果你坚持要这样做,你可以尝试以下代码: result.Select(x => ((IDictionary<string, object>)x).ToDictionary(ks => ks.Key, vs => vs.ToString())).ToList(); 但我不建议这么做。
最好的方法是使用dapper,它可以始终强类型返回SQL查询结果,所以你可以这样写: connection.Query<YOURTYPE>(query, parameters).ToList();

有没有办法返回List<IDictionary<string, string>>? - ThejaSingireddy
我认为这不会产生你想要的效果,因为字典中并不是每个项目都是字符串,它可能是布尔值、整数、双精度等等……你可以尝试做类似于 result.Select(x => ((IDictionary<string, object>)x).ToDictionary(ks => ks.Key, vs => vs.ToString())).ToList(); 这种方法,但那真的很糟糕。你也可以始终强制转换从dapper返回的结果类型,所以你不需要写 connection.Query(query, parameters).ToList(),而是写connection.Query<TYOURTYPE>(query, parameters).ToList()。 - Tarek

2
像这样的东西:
var foo = db.Query(
                        "MySp",
                        new { parameters },
                        commandType: CommandType.StoredProcedure)
                    .ToDictionary(
                        row => (int) row.Id,
                        row => (string) row.Name);

在这里,row是列名,foo是字典类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接