如何使用字符串作为参数遍历 Dapper 动态查询结果?
Posted
技术标签:
【中文标题】如何使用字符串作为参数遍历 Dapper 动态查询结果?【英文标题】:How do I loop through Dapper dynamic query results using strings as parameters? 【发布时间】:2020-06-18 11:23:47 【问题描述】:所以我遇到了这段代码:
dynamic account = conn.Query<dynamic>(@"
SELECT Name, Address, Country
FROM Account
WHERE Id = @Id", new Id = Id ).FirstOrDefault();
Console.WriteLine(account.Name);
Console.WriteLine(account.Address);
Console.WriteLine(account.Country);
(How to return dynamic types List<dynamic> with Dapper ORM).
我想知道如何使用字符串作为参数来做同样的事情。有点像:
dynamic account = conn.Query<dynamic>($@"
SELECT commaseperated(parameters)
FROM Account
WHERE Id = @Id", new Id = Id ).FirstOrDefault();
Console.WriteLine(account[parameters[0]]);
Console.WriteLine(account[parameters[1]]);
其中参数是字符串[] 类型。所有结果都是字符串类型,因此甚至可能不需要使用动态。
【问题讨论】:
so using dynamic may not even be necessary
宾果游戏!对于这个简单的用例,不需要引入动态类型。
那么如何使用字符串参数循环遍历结果呢?如果我遍历查询结果,我只会得到第一个参数,如下所示: var res = connection.Queryconnection.Query<IEnumerable<string>>(...)
【参考方案1】:
我假设你可以这样做:
string[] parameters = new string[] "param1", "param2" ;
dynamic account = conn.Query<dynamic>($@"SELECT String.Join(",", parameters) FROM Account WHERE Id = @Id", new Id ).FirstOrDefault();
foreach (string s in parameters)
Console.WriteLine(account.GetType().GetProperty(s).GetValue(account, null));
Console.ReadLine();
【讨论】:
我不能在动态上调用 GetType()。我没有查询任何类型的对象,只是随机列中的随机字符串以上是关于如何使用字符串作为参数遍历 Dapper 动态查询结果?的主要内容,如果未能解决你的问题,请参考以下文章
dapper利用DynamicParameters构建动态参数查询
如何在 Dapper Query 的动态参数中传递多个条件,就像我们为 IN 运算符传递的一样
DB2 - 使用带有字符串数组参数的 Dapper 选择查询将不会返回正确的结果
我想使用 dapper 在 Oracle 和 SQL 数据库上执行参数化查询
使用Dapper时,如何将MySqlParameters[] 变成Dapper.DynamicParameters动态对象