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也发生变化,这不会发生之前。
答案 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()