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 也发生了变化,以前没有发生这种情况。

4

2 回答 2

0

您在调用 Where() 时捕获了迭代器变量 't',它是一个 lambda 表达式:

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 的每次调用捕获一个不同的变量,这将获得您想要的结果。

于 2009-07-22T16:20:33.100 回答
0

有了这个,现在 result.AsyncState URL 正在改变 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()
于 2009-07-22T17:03:26.430 回答