簡體   English   中英

如何從對象數組訪問數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM