不包含“Add”的定义,也没有接受第一个参数的扩展方法“Add”

本文关键字:Add 第一个 参数 扩展 方法 定义 包含 | 更新日期: 2023-09-27 18:34:22

我在使用行中的"add"时遇到问题:

直流添加(上校)列名,博士);

我在 Class1 中的类语句.cs应该处理这个问题:

数据类 DC = 新数据类();

错误代码:

 'CertainDate.dataclass' does not contain a definition for 'Add' and no extension method 'Add' accepting a first argument of type 'CertainDate.dataclass' could be found (are you missing a using directive or an assembly reference?)

默认.aspx.cs

    public static string GetDate(string mo, string dy, string yr)
    {
        string json = "";
        string date1 = mo.ToString() + "/" + dy.ToString() + "/" + yr.ToString() + " 8:00 AM";
        if (date1.Length > 6)
        {
            List<dataclass> returndata = new List<dataclass>();
            dataclass dc = new dataclass();
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            string connStr = ConfigurationManager.ConnectionStrings["jsonobject"].ConnectionString;
            string cmdStr = "SELECT ([idd],[datetime],[col1],[col2],[col3]) FROM [jsondata] WHERE [datetime]=@datetime;";
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                using (SqlCommand cmd = new SqlCommand(cmdStr, conn))
                {
                    conn.Open();
                    cmd.Parameters.AddWithValue("@datetime", date1);
                    using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                    {
                        da.Fill(ds);
                        dt = ds.Tables[0];
                        foreach (DataRow dr in dt.Rows)
                        {
                            foreach (DataColumn col in dt.Columns)
                            {
                                dc.Add(col.ColumnName, dr[col]);
                            }
                            returndata.Add(dc);
                        }
                    }
                }
            }
            System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            json = serializer.Serialize(returndata);
        }
        return json;
    }

类1.cs

public class dataclass
{
    public string idd { get; set; }
    public string datetime { get; set; }
    public string col1 { get; set; }
    public string col2 { get; set; }
    public string col3 { get; set; }
}

不包含“Add”的定义,也没有接受第一个参数的扩展方法“Add”

似乎您想将检索到的每个数据行添加到您的 returndata 列表中,如果是这种情况,那么您可能想要这个

....
foreach (DataRow dr in dt.Rows)
{
    dataclass dc = new dataclass();
    dc.idd = dr["idd"].ToString();
    dc.datetime = dr["datetime"].ToString();
    dc.col1 = dr["col1"].ToString();
    dc.col2 = dr["col2"].ToString();
    dc.col3 = dr["col3"].ToString();
    returndata.Add(dc);
}
...

当然,错误是由您调用不存在的方法引起的。数据类没有 Add 方法,因此无法调用它。您可以定义它并传递数据行,但这确实是不必要的。

您还应该非常小心地评估返回的数据。如果您的行中没有任何空值,上面的代码效果很好。如果您有空值,那么您应该查看 DataRow.IsNull 方法

作为旁注,如果您在使用其他类时遇到很多这种情况(意味着转换在特定类的对象实例中加载的记录),那么您可以查看将删除所有这些代码的 ORM。例如,看看Dapper

所以在你的问题中,dataclass是一个没有称为Add的方法的自定义类 - 这就是你的错误所说的。

我相信您要做的是向returndata添加一个新的dataclass实例 - 这是一个List<>并且确实有一个Add方法

因此,更改此内容:

foreach (DataColumn col in dt.Columns)
{
        dc.Add(col.ColumnName, dr[col]);
}
returndata.Add(dc)

为此 - 这是一个单行,它在添加到 returndata 期间创建 dataclass 的实例 - 您需要用col中的属性填充 dataclass 的属性 - 我们不知道这些来自您的问题。

foreach (DataColumn col in dt.Columns)
{
    returndata.Add(new dataclass(){
         idd = ,//whatever column out of col
         datetime = //do the same
     });
}

或者,如果您更习惯(并且更容易调试)创建一个dataclass,填充它,然后将其添加到returndata然后执行以下操作:

foreach (DataColumn col in dt.Columns)
{
    dc = new dataclass();
    dc.idd = //whatever is in col, i.e col["idd"] 
    // do the same for all other properties in dc.
}
returndata.Add(dc);

您正在调用 dataclass 实例add方法,但您没有定义 dataclass 中add方法。

...
foreach (DataColumn col in dt.Columns)
{
    dc.Add(col.ColumnName, dr[col]); //Error
}