C#:无法将类型'int'隐式转换为'int []'

era*_*los 0 c# asp.net

我有一个名为StorePage的模型,它有2个可以包含多个属性值的属性,我将它们声明为数组,稍后在控制器中的方法迭代通过数据读取器,从数据库/表列中获取值将它们放在这些数组中并使我们的前端应用程序可以访问它们.

public class StorePage
{
    public int ActionTypeID { get; set; }
    public int ResultTypeID { get; set; }
    public string ResultMessage { get; set; }
    public int StorePageID { get; set; }
    public int SPPreambleID { get; set; }
    public string Title { get; set; }
    public string SEOTitle { get; set; }
    public int ParentStorePageID { get; set; }
    public string Meta { get; set; }
    public string Image { get; set; }
    public string ImageLink { get; set; }
    public string Blurb { get; set; }
    public int RegionID { get; set; }
    public string Footer { get; set; }

    // these are the arrays
    public int[] SPAttributeRefID { get; set; }
    public int[] AttributeID { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

//以下是从数据库中获取值的方法.

    public StorePage GetPage(int StorePageID, int SPPreambleID)
    {
        StorePage storepage = new StorePage();
        using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DEV_BI01_LVT"].ConnectionString))
        {
            using (SqlCommand cmd = new SqlCommand("mn_StorePage_GetPage", con))
            {
                cmd.Parameters.AddWithValue("@StorePageID", SqlDbType.Int).Value = StorePageID;

                if (SPPreambleID != -1)                    
                {
                    cmd.Parameters.AddWithValue("@SPPreambleID", SqlDbType.Int).Value = SPPreambleID;
                }
                cmd.CommandType = CommandType.StoredProcedure;
                    con.Open();
                    SqlDataReader reader = cmd.ExecuteReader();
                    while (reader.Read())
                    {
                        storepage.StorePageID = reader.GetInt32(0);
                        storepage.Title = (reader.IsDBNull(1)) ? string.Empty : reader.GetString(1);
                        storepage.SEOTitle = (reader.IsDBNull(2)) ? string.Empty : reader.GetString(2);
                        storepage.ParentStorePageID = (reader.IsDBNull(3)) ? -1 : reader.GetInt32(3);
                        storepage.Meta = (reader.IsDBNull(4)) ? string.Empty : reader.GetString(4);
                        storepage.SPPreambleID = (reader.IsDBNull(5)) ? -1 : reader.GetInt32(5);
                        storepage.Image = (reader.IsDBNull(6)) ? string.Empty : reader.GetString(6);
                        storepage.ImageLink = (reader.IsDBNull(7)) ? string.Empty : reader.GetString(7);
                        storepage.Blurb = (reader.IsDBNull(8)) ? string.Empty : reader.GetString(8);
                        storepage.RegionID = (reader.IsDBNull(9)) ? -1 : reader.GetInt32(9);
                        storepage.Footer = (reader.IsDBNull(10)) ? string.Empty : reader.GetString(10);

                        for (int i = 0; i <= 3; i++)
                        {
                            storepage.SPAttributeRefID = reader.GetInt32(11);
                        }

                    }
            }
        }
        return storepage;
    }
Run Code Online (Sandbox Code Playgroud)

For循环中的行给出了一个错误:

无法将类型'int'隐式转换为'int []'

storepage.SPAttributeRefID = reader.GetInt32(11);
Run Code Online (Sandbox Code Playgroud)

是否有人可以尝试帮我解决这个问题?我可能错过了一个演员,或者有更好的方法来获取和存储值.页面和属性值之间的关系是一对多的.在我的情况下,页面可以有多个属性,这些是工具,样式和评分.

以下是我要检索的示例:

23  trumpet seo 7   meta    26  trumpet.jpg /store/trumpet.jpg  blurb   3   footer  1   506
23  trumpet seo 7   meta    26  trumpet.jpg /store/trumpet.jpg  blurb   3   footer  2   183
23  trumpet seo 7   meta    26  trumpet.jpg /store/trumpet.jpg  blurb   3   footer  3   45
Run Code Online (Sandbox Code Playgroud)

最后一列是属性列.您可以看到这些是与单页记录有关的3个不同值.

为了您的帮助,请提前感谢.

Gil*_*een 7

错误是不言自明的.该物业SPAttributeRefIDint[]:

public int[] SPAttributeRefID { get; set; }
Run Code Online (Sandbox Code Playgroud)

结果reader.GetInt32(11);int.

如果要使用该值填充该数组,则:

storepage.SPAttributeRefID = new int[] { reader.GetInt32(11) };
Run Code Online (Sandbox Code Playgroud)

通过此代码:

for (int i = 0; i <= 3; i++)
{
    storepage.SPAttributeRefID = reader.GetInt32(11);
}
Run Code Online (Sandbox Code Playgroud)

我想你想用不同列中的3个项填充数组.你可以做:

storepage.SPAttributeRefID = new int[] 
{  
    reader.GetInt32(11),  
    reader.GetInt32(12),  
    reader.GetInt32(13)
};

//Or:
storepage.SPAttributeRefID = Enumerable.Range(11,3)
                                       .Select(x => reader.GetInt32(x));
Run Code Online (Sandbox Code Playgroud)

更新后:你应该做的是使用我给出的第一个建议,然后使用Linq来GroupBy结果.循环的每次迭代都会while处理1条记录,而您尝试实现的内容则是记录之间.另一种选择是通过一些ORM将linq用于实体,并GroupBy在数据库本身中执行此操作.