[英]How do I access the data from an array of objects?
我正在使用Visual Studios 2013 for Web用C#編寫API。
所以我有這個模型CurrentVisit:
public class CurrentVisit
{
public Int64 visits_id { get; set; }
public Int32 current_cycle_visits { get; set; }
public Int32 total_visits { get; set; }
}
我使用SQL存儲過程來檢索所需的數據:
object[] currentCycleArray = new object[visitIdArray.Length];
for (Int32 i = 0; i < currentCycleArray.Length; i++)
{
var currentCycle = db.Database.SqlQuery<CurrentVisit>("uspApiGetCurrentVisit @member_id, @page_id, @visits_id", new SqlParameter("@member_id", memberAndPageIdentification.member_id), new SqlParameter("@page_id", memberAndPageIdentification.page_id), new SqlParameter("@visits_id", visitIdArray[i].visits_id));
currentCycleArray[i] = currentCycle.ToArray();
}
假設visitIdArray.Length = 1;
object[] visits_balance = new object[visitIdArray.Length];
for(Int32 i = 0; i < visitIdArray.Length; i++)
{
Int32 total_visits;
for(Int32 j = 0; j < currentCycleArray.Length; j++)
{
if(currentCycleArray[j].visits_id == visitIdArray[i].visits_id)
{
total_visits = currentCycleArray[j].total_visits;
}
}
}
在我看來,這似乎是可以正常工作的代碼,但事實並非如此。 根據Visual Studio,currentCycleArray [j] .visits_id不是有效的屬性。 total_visits也是如此。 我無法訪問CurrentCycle字段。 這是怎么回事?
更新:
這不起作用:
object[] currentCycleArray = new object[visitIdArray.Length];
for (Int32 i = 0; i < currentCycleArray.Length; i++)
{
var currentCycle = db.Database.SqlQuery<CurrentVisit>("uspApiGetCurrentVisit @member_id, @page_id, @visits_id", new SqlParameter("@member_id", memberAndPageIdentification.member_id), new SqlParameter("@page_id", memberAndPageIdentification.page_id), new SqlParameter("@visits_id", visitIdArray[i].visits_id));
currentCycleArray[i] = (CurrentVisit)currentCycle.ToArray();
}
或這個:
object[] currentCycleArray = new object[visitIdArray.Length];
for (Int32 i = 0; i < currentCycleArray.Length; i++)
{
var currentCycle = db.Database.SqlQuery<CurrentVisit>("uspApiGetCurrentVisit @member_id, @page_id, @visits_id", new SqlParameter("@member_id", memberAndPageIdentification.member_id), new SqlParameter("@page_id", memberAndPageIdentification.page_id), new SqlParameter("@visits_id", visitIdArray[i].visits_id));
currentCycleArray[i] = (CurrentVisit)currentCycle;
}
根據此DbRawSqlQuery類 ,DbRawSqlQuery實現IEnumerable <TElement>。 這意味着您可以直接在集合上進行迭代。 因此,除了擁有對象集合之外,您還可以使其成為類型化集合:
DbRawSqlQuery<CurrentVisit>[] currentCycleArray = new DbRawSqlQuery<CurrentVisit>[visitIdArray.Length];
for (Int32 i = 0; i < currentCycleArray.Length; i++)
{
var currentCycle = db.Database.SqlQuery<CurrentVisit>("uspApiGetCurrentVisit @member_id, @page_id, @visits_id", new SqlParameter("@member_id", memberAndPageIdentification.member_id), new SqlParameter("@page_id", memberAndPageIdentification.page_id), new SqlParameter("@visits_id", visitIdArray[i].visits_id));
currentCycleArray[i] = currentCycle;
}
或者,您可以保留對象集合,並在訪問它們之前強制轉換對象:
object[] visits_balance = new object[visitIdArray.Length];
for(Int32 i = 0; i < visitIdArray.Length; i++)
{
Int32 total_visits;
for(Int32 j = 0; j < currentCycleArray.Length; j++)
{
var visit = (CurrentVisit)currentCycleArray[j]; // Cast to CurrentVisit
if(visit.visits_id == visitIdArray[i].visits_id)
{
total_visits = visit.total_visits;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.