Ado Net Data Services BeginExecute问题

时间:2009-07-22 16:11:12

标签: linq-to-entities wcf-data-services astoria

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 个答案:

答案 0 :(得分:1)

我发现返回 VST_CANTIDAD_PERSONAS_POR_DIA 的实体只被创建一次!(当第一次调用该方法时);我认为这可能是因为模型在另一个项目中,或者因为我正在使用Entity框架扩展。

BTW我现在注册,对不起,我添加了答案,但我可以评论或编辑另一篇文章。

答案 1 :(得分: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捕获一个不同的变量,它将获得您想要的结果。

答案 2 :(得分:0)

有了这个,现在结果.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()