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, которые будут получать желаемые результаты.