这篇文章上次修改于 288 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
根据前端发送的查询条件,从数据库的指定表中查询数据,然后将查询出的数据以 json
格式序列化后发送到前端进行展示。
常规做法可能是在查询方法里将可能查询的表的查询和赋值逻辑都做一遍,因为每张表的字段不一样,所以也没法统一起来一起做。
如果能动态构建类以及类属性,并且对这些属性赋值的话,代码就会变得非常简单。经过搜索后发现使用 dynamic
和 ExpandoObject
可以实现该目标。下面是具体做法代码片段:
using var conn = new SqliteConnection(_configuration.GetConnectionString("DefaultConnection"));
conn.Open();
using var cmd = conn.CreateCommand();
cmd.CommandText = "select * from t";
var reader = cmd.ExecuteReader();
var tableInfo = GetTableInfo(abbre, false); // 获取数据库表的架构信息
var rows = new List<object>();
while (reader.Read())
{
dynamic row = new ExpandoObject(); // 创建动态对象
var rowDict = (IDictionary<string, object>)row;
foreach (var column in tableInfo.Columns)
{
rowDict[column.Name] = reader[column.Name]; // 以字典键值的方式对属性进行赋值
}
rows.Add(row);
}
没有评论