C# 根据C中列模式注释的内容从MySQL表中选择数据

C# 根据C中列模式注释的内容从MySQL表中选择数据,c#,mysql,C#,Mysql,我有一个函数,它返回一个字典对象,其中包含表中的数据。由于字段变化很大,我让它动态构建字典字段: Dictionary<string, string> getData(string indexvalue) { Dictionary<string, string> ret = new Dictionary<string, string>(); using (MySqlConnection DB = getConnection()) { using

我有一个函数,它返回一个字典对象,其中包含表中的数据。由于字段变化很大,我让它动态构建字典字段:

Dictionary<string, string> getData(string indexvalue) {
  Dictionary<string, string> ret = new Dictionary<string, string>();
  using (MySqlConnection DB = getConnection()) {
    using (MySqlCommand cmd = new MySqlCommand("SELECT * FROM table WHERE indexfield = ?v", DB)) {
      DB.Open();
      cmd.Parameters.AddWithValue("?v", indexvalue);
      using (MySqlDataReader RS = cmd.ExecuteReader()) {
        DataTable schemaTable = RS.GetSchemaTable();
        if (!RS.HasRows) return ret;
        while (RS.Read()) {
          foreach (DataRow fld in schemaTable.Rows) {
            ret.Add(fld["ColumnName"].ToString(), RS[fld["ColumnName"].ToString()].ToString());
          }
        }
      }
      DB.Close();
    }
  }
  return ret;
}

如果表模式在列的注释中有skip,我希望它能够跳过一列。我可以通过在处理列时运行另一个SQL查询轻松地完成这项工作,但我更愿意找到一种不用另一个查询即可完成这项工作的方法。可能吗?

我的评论没有考虑到该数据表。作为DataColumnCollection的列不直接支持Linq-但是有一个简单的解决方法可以转换为所需的类型:

var nonskipcolumns = from c in schemaTable.Columns.Cast<DataColumn>() 
                     where !c.Caption.Contains("skip") 
                     select c.ColumnName;

foreach (var row in schemaTable.Rows.Cast<DataRow>())
{
    foreach (var col in nonskipcolumns)
    {
        ret.Add(col, (string)row[col]);
    }
}

以这种方式使用数据表似乎有点奇怪。如果我没有弄错的话,您可以简单地使用schemaTable.LoadRS并在筛选集schemaTable.Columns.Wherec=>上创建一个嵌套循环!c、 标题。包含一行行的标题。