[英]C# : Cannot implicitly convert type 'int' to 'int[]'
我有一個名為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; }
}
//以下是從數據庫獲取值的方法。
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;
}
For循環中的行給我一個錯誤:
無法將類型'int'隱式轉換為'int []'
storepage.SPAttributeRefID = reader.GetInt32(11);
有人可以嘗試幫助我解決此問題嗎? 我可能缺少演員表,或者也許有更好的方法來獲取和存儲值。 頁面和屬性值之間的關系是一對多的。 在我的情況下,頁面可以具有多個屬性,這些屬性是樂器,樣式和得分。
這是我嘗試檢索的示例:
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
最后一列是屬性列。 您可以看到與單個頁面記錄有關的3個不同的值。
您的幫助,在此先感謝。
該錯誤是不言自明的。 SPAttributeRefID
屬性是一個int[]
:
public int[] SPAttributeRefID { get; set; }
reader.GetInt32(11);
是一個int
。
如果要用該值填充該數組,則:
storepage.SPAttributeRefID = new int[] { reader.GetInt32(11) };
通過此代碼:
for (int i = 0; i <= 3; i++)
{
storepage.SPAttributeRefID = reader.GetInt32(11);
}
我認為您想用來自不同列的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));
更新后:您應該做的是使用我給出的第一個建議,然后再使用Linq對結果進行GroupBy
。 while
循環的每次迭代都會處理1條記錄,而您要實現的目標是在記錄之間。 另一個選擇是使用linq通過某些ORM來對實體進行操作,並在數據庫本身中執行此GroupBy
。
你可以這樣做。 假定最后2列(12,13)是屬於數組的項。 請注意,您現在有了列表而不是數組,因為在數組具有固定大小的情況下,這些列表更容易增長。
public class StorePage
{
public StorePage(){
SPAttributeRefID = new List<int>();
AttributeID = new List<int>();
}
// these are now Lists
public List<int> SPAttributeRefID { get; set; }
public List<int> AttributeID { get; set; }
}
public StorePage GetPage(int StorePageID, int SPPreambleID)
{
StorePage storepage = null;
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();
using(SqlDataReader reader = cmd.ExecuteReader())
while (reader.Read())
{
// create a new instance if not created yet
if(storepage == null)
{
storepage = new StorePage();
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);
}
// only read the columns 12,13 and add each respective member to the corresponding list
if(!reader.IsDBNull(11))
storepage.SPAttributeRefID.Add(reader.GetInt32(11));
if(!reader.IsDBNull(12))
storepage.AttributeID.Add(reader.GetInt32(12));
}
}
return storepage;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.