我的模块没有映射到数据库(sql server),仅用于生成报告。
public class Report
{
public int USERID { get; set; }
public DateTime DateToCal { get; set; }
public string Name { get; set; }
public string Position { get; set; }
public TimeSpan? Intime { get; set; }
public TimeSpan? OutTime { get; set; }
}
我生成一个查询并填充Report
的一些属性(USERID,DateToCal,Name,Position,Intime),并且Report的某些属性保持为null(如OutTime is null
)
var query = .....;
现在我想要对查询项(类型为Report
)进行迭代,并将null属性OutTime
的值设置为
foreach(var items in query)
{
var outtime= from x in con.CHECKINOUTs
where x.USERID == items.USERID && EntityFunctions.TruncateTime(x.CHECKTIME) == EntityFunctions.TruncateTime(items.DateToCal && x.CHECKTYPE == "O"
select x.CHECKTIME
.Single();
items.OutTime= outtime.TimeOfDay;
}
现在的问题是,在鼠标悬停到items.OutTime
时,在foreach中会出现值,但如果我从foreach和mousehover转到query
,则仍有OutTime is null
。没有出现我设定的价值。是否可以这样设置实体的值。或者我的问题是什么?
谢谢。
答案 0 :(得分:1)
在迭代之前在本地保存查询结果:
var query = ....ToList();
在您的情况下,查询执行两次 - 第一次更新OutTime
属性时,第二次迭代查询项(查看调试器或在UI中显示)。因此,当第二次执行查询时,您会看到全新的对象集作为查询结果(原始null
值为OutTime
)。
BTW考虑使用单个JOIN查询,而不是对主查询中的每个项目进行单独的outtime查询。
答案 1 :(得分:0)
尝试使用以下代码:
public class Report
{
public int USERID { get; set; }
public DateTime DateToCal { get; set; }
public string Name { get; set; }
public string Position { get; set; }
private TimeSpan? _intime;
public TimeSpan Intime {
get { return _intime ?? new TimeSpan(0); }
set { _intime = value; }
}
private TimeSpan? _outTime;
public TimeSpan OutTime
{
get { return _outTime ?? new TimeSpan(0); }
set { _outTime = value; }
}
}