Ado Net Data Services Проблема BeginExecute

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 также изменится, этого раньше не было.

3 ответа

Я обнаружил, что объект, возвращенный VST_CANTIDAD_PERSONAS_POR_DIA, создается только один раз!(когда метод вызывается впервые); я думаю, что это может быть потому, что модель находится в другом проекте или потому что я использую расширения Entity Framework.

Кстати, я зарегистрирован, извините, что я добавил ответ, но я могу комментировать или редактировать другой пост.

Теперь URL-адрес result.AsyncState меняет значение ID_TURN (до того, как я всегда получал только последнее (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')}

Но EndExecuteResult все еще возвращается listaDia[0].ID_TURN = 1

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

Вы захватываете переменную итератора 't' в своем вызове Where(), которое является лямбда-выражением:

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

К тому времени, когда запросы выполняются, они все ссылаются на один и тот же 't', который в вашем случае является окончательным значением до завершения цикла. Другими словами, все они получают одинаковое значение для 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;

Это будет захватывать разные переменные для каждого вызова Where, которые будут получать желаемые результаты.

Другие вопросы по тегам