我有一个未映射到数据库的模块,用于生成报告。
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; }
}
我生成一个查询并填写报告的一些属性(USERID,DateToCal,Name,Position,Intime),剩余属性OutTime为空。
var query = .....;
现在我想要的是查询项目(类型为Report)将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 :(得分:0)
问题是“items”仅在foreach循环中可用,并在每次迭代结束时被丢弃。如果要保留该值,可以使用for循环,并直接在可枚举的“查询”中设置该项:
for(int index = 0; index < query.Length; ++index;)
{
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();
query[index].OutTime= outtime.TimeOfDay;
}
答案 1 :(得分:0)
首先尝试使用方法First()执行linq查询:
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).First();
items.OutTime = outtime.TimeOfDay;
}
答案 2 :(得分:0)
请参阅此topic这是因为foreach旨在迭代容器,确保每个项目只访问一个,而不更改容器,以避免令人讨厌的副作用。