我遇到了一个问题,我在 IQueryable 对象中返回了数据并且它被重复了。我通过将用于构建集合的临时对象从方法范围移动到循环范围来解决它。换句话说,每次循环重复时它都会被清除。
原来的:
private void MyMethod()
{
SomeObj ProjDtl = new SomeObj(); //here is the obj method scoped
foreach (ReservedSimProjects item in parameters.ReservedProjects.ReservedSimProj)
{
IQueryable<SJ> DbProj = SimColl.Where(e => e.SimProjectID == item.ProjectId);
ProjDtl.ProjName = DbProj.First().ProjName;
ProjDtl.ProjArea = DbProj.First().ProjArea;
ProjDtl.ProjPerim = DbProj.First().ProjArea;
....etc....
ProjectsDetails.Add(ProjDtl);
}
现在,对于我明显不正确的想法,ProjDtl 将被创建一次并重用。随着循环的迭代,旧值将被新值覆盖。这似乎正是正在发生的事情。逐步通过调试器,ProjDtl 属性被覆盖,但随后添加到集合的最后一行,第一次传递的原始数据被添加,因此我的集合有重复、三次等。更改范围以便在每次传递时重新创建对象问题。为什么因为有某种指向原始对象的指针,即使它的每个属性都被重新分配,它也没有更新???
private void MyMethod()
{
foreach (ReservedSimProjects item in parameters.ReservedProjects.ReservedSimProj)
{
SomeObj ProjDtl = new SomeObj(); //here is the obj method scoped
IQueryable<SJ> DbProj = SimColl.Where(e => e.SimProjectID == item.ProjectId);
ProjDtl.ProjName = DbProj.First().ProjName;
ProjDtl.ProjArea = DbProj.First().ProjArea;
ProjDtl.ProjPerim = DbProj.First().ProjArea;
....etc....
ProjectsDetails.Add(ProjDtl);
}
因此,有一次我设法解决了自己的问题,但我不确定为什么/解决了什么。
JB