2009-07-22 8 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} 

Bitte Überprüfen Sie den Code oben, warum dies geschieht, wird angenommen, dass die ID_TURN auch ändern, dies vor nicht geschah.Ado Net Data Services BeginExecute Problem

Antwort

0

Sie die Iteratorvariable ‚t‘ in Ihrem Aufruf Wo() erfassen, die ein Lambda-Ausdruck ist:

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

Durch die Zeit, die Abfragen ausführen, sie verweisen alle gleich " t ', was in Ihrem Fall der letzte Wert ist, bevor die Schleife endet. Mit anderen Worten, sie erhalten alle denselben Wert für t.ID_TURN, was in Ihrem Beispiel "1" ist.

dies richtig zu machen, eine neue Variable deklariert:

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; 

Dies wird eine andere Variable für jeden Aufruf erfassen Wo, welche die Ergebnisse erhalten, die Sie mögen.

0

Damit nun die result.AsyncState URL verändert die ID_TURN Wert (bevor ich nur die letzte immer bekommen war (128M))

{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')} 

Aber die EndExecuteResult kehrt noch listaDia[0].ID_TURN = 1

List listaDias = (result.AsyncState as DataServiceQuery).EndExecute(result).ToList() 
+0

Dennis, bearbeiten Sie Ihre Frage, keine Antworten hinzufügen. Vielen Dank. –

+0

IM sorry, der Browser geschlossen und weil ich nicht registriert bin, kann ich die erste Frage nicht bearbeiten. –

+0

Ok .. aber Ihr Handler (ProcesarHorarioPersonasTurno) wird viermal aufgerufen, ja? Sie erwarten nicht, dass der erste Handler-Aufruf alle Ergebnisse enthält, oder? (Muss fragen - Entschuldigung, wenn das offensichtlich ist.) –

1

i Gefunden, dass die Entität zurückgegeben wurde VST_CANTIDAD_PERSONAS_POR_DIA wird nur einmal erstellt (wenn die Methode zum ersten Mal aufgerufen wird); Ich denke, das liegt vielleicht daran, dass das Modell in einem anderen Projekt ist oder weil ich Entity-Framework-Erweiterungen verwende.

BTW ich bin jetzt registriert, sorry thatat ich eine Antwort hinzufügen, aber ich kann den anderen Beitrag kommentieren oder bearbeiten.

+0

Danke für die Rückkehr! –

+0

Das Problem war, dass ich die Entitäten global erschaffen habe, jetzt improvisiere ich eine neue Entity innerhalb der Foreach und arbeite endlich. – shinji14