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;
}
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加