如何从SqlDataReader中只获取一些行?

Emm*_*res 2 c# linq datareader fetch

我正在从带有datareader的表中获取值,如下所示:

    string query = @"SELECT XMLConfig, Enable FROM TableCfg";
    using (SqlConnection cnction = new SqlConnection(cnnstr))
    {
      cnction.Open();
      using (SqlCommand sqlCmd = new SqlCommand(query, cnction))
      {
         SqlDataReader dtRead = sqlCmd.ExecuteReader();
         while (dtRead.Read())
         {
           xmlConf = dtRead.GetString(0);
           enabl = dtRead.GetString(1);
         }
         dtRead.Close();
      }
    }
Run Code Online (Sandbox Code Playgroud)

Enable字段是布尔值(True/False).有没有办法只获取行,其中field enable ="True"?我尝试使用LINQ,但我是新手,我一定是做错了.

using (SqlCommand sqlCmd = new SqlCommand(query, cnction))
{
  SqlDataReader dtRead = sqlCmd.ExecuteReader();
  var ob =(from IDataRecord r in sqlCmd.ExecuteReader()
           where r.GetString(3).ToString() == "True"
           select "Enable");   
}
Run Code Online (Sandbox Code Playgroud)

请帮帮我.最好的祝福.

Jon*_*eet 7

您应该在数据库端而不是客户端执行尽可能多的过滤:

string query = "SELECT XMLConfig FROM TableCfg WHERE Enable = True";
Run Code Online (Sandbox Code Playgroud)

注意现在你甚至不需要提取Enable,因为你已经知道它将True适用于所有匹配的行.

您还应该考虑使用LINQ to SQL或Entity Framework,而不是您当前使用的相当低级别的堆栈.它并不总是合适的,但它确实使事情变得更加清洁.