根据前端发送的查询条件,从数据库的指定表中查询数据,然后将查询出的数据以 json 格式序列化后发送到前端进行展示。

常规做法可能是在查询方法里将可能查询的表的查询和赋值逻辑都做一遍,因为每张表的字段不一样,所以也没法统一起来一起做。

如果能动态构建类以及类属性,并且对这些属性赋值的话,代码就会变得非常简单。经过搜索后发现使用 dynamicExpandoObject 可以实现该目标。下面是具体做法代码片段:

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);
}

参考资料