2009-07-22 13 views
1
public void metodoX() 
{ 
foreach (TURNO t in listaTurnoPersona) 
{ 
    DataServiceQuery<VST_CANTIDAD_PERSONAS_POR_DIA> query = 
    General.Entities.VST_CANTIDAD_PERSONAS_POR_DIA.Where(
        z => z.ID_TURN == t.ID_TURN 
         && z.FE_CALE >= RadDatePicker1.SelectedDate.Value 
         && z.FE_CALE <= RadDatePicker1.SelectedDate.Value.AddDays(6)) 
    as DataServiceQuery<VST_CANTIDAD_PERSONAS_POR_DIA>; 
    query.BeginExecute(ProcesarHorarioPersonasTurno, query); 
    //HERE THE ID_TURN CHANGE 1, 2, 3 , 4 ... 
} 
} 

public void ProcesarHorarioPersonasTurno(IAsyncResult result) 
{ 
      List<VST_CANTIDAD_PERSONAS_POR_DIA> listaDias = (result.AsyncState as DataServiceQuery<VST_CANTIDAD_PERSONAS_POR_DIA>).EndExecute(result).ToList(); 
     //HERE ALWAYS I GET THE RESULT IDTURN = 1} 

なぜこれが起こっている、上記のコードをチェックしてください、これは前に起こっていたしません、ID_TURNも変更することを想定しています。騒ぎネットデータサービスBeginExecute問題

答えて

0

あなたはラムダ式である()の呼び出しあなたにイテレータ変数「T」を捕捉している:クエリが実行時までに

Where(z => z.ID_TURN == t.ID_TURN && z.FE_CALE ... 

、それらはすべて「同じを参照していますあなたのケースでは、ループが終了する前の最終値です。言い換えれば、t.ID_TURNの値はすべて同じ値になります。例では「1」です。

は、これを適切に行う新しい変数を宣言するには:

var id = t.ID_TURN; 

DataServiceQuery query = General.Entities.VST_CANTIDAD_PERSONAS_POR_DIA 
    .Where(z => z.ID_TURN == id && 
     z.FE_CALE >= RadDatePicker1.SelectedDate.Value && 
     z.FE_CALE <= RadDatePicker1.SelectedDate.Value.AddDays(6)) 
    as DataServiceQuery; 

これは、あなたが望む結果を得るであろう場合には、それぞれの呼び出しのために別の変数をキャプチャします。これにより

0

{http://localhost:888/Services/WebDataServiceSiata.svc/VST_CANTIDAD_PERSONAS_POR_DIA()?$filter=((**ID_TURN eq 21M**) and (FE_CALE ge datetime'2009-07-20T00:00:00-05:00')) and (FE_CALE le datetime'2009-07-26T00:00:00-05:00')} 

しかしEndExecuteResultはまだlistaDia[0].ID_TURN = 1

List listaDias = (result.AsyncState as DataServiceQuery).EndExecute(result).ToList() 
を返している(私は最後常に1(128M)になっていた前に)今result.AsyncStateのURLはID_TURN値を変更しています
+0

デニス、質問を編集し、回答を追加しないでください。ありがとう。 –

+0

IM申し訳ありませんが、ブラウザが閉じていて、登録されていないため、私は最初の質問を編集できません。 –

+0

Ok ..あなたのハンドラ(ProcesarHorarioPersonasTurno)が4回呼び出されています、はい?あなたはすべての結果を含む最初のハンドラ呼び出しを期待していませんよね? (これは明白であれば申し訳ありません) –

1

i返されたエンティティがVST_CANTIDAD_PERSONAS_POR_DIAであることが判明しました(このメソッドが最初に呼び出されたとき)。私はこれがおそらくモデルが別のプロジェクトにあるか、またはエンティティフレームワーク拡張を使用しているためだと思います。

私は今すぐ登録しました。申し訳ありませんが、私は答えを追加しますが、別の投稿をコメントしたり編集したりすることができます。

+0

戻ってくれてありがとう! –

+0

問題は、グローバルにエンティティを作成して、今は新しいエンティティをforeach内にインスタンス化して、最終的に作業していたことでした。 – shinji14

関連する問題