0

我有未映射到数据库并用于生成报告的模块。

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 = .....;

现在我想要的是 foreach 查询项目(报告类型)将 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;
            }

现在的问题是,在 mousehover 到items.OutTimewith in foreach 时出现值,但如果我从 foreach 和 mousehover 到query那里仍然存在OutTime is null. 没有出现我设置的值。这是否可以通过这种方式设置实体的值。或者我的问题是什么?

谢谢你。

4

3 回答 3

0

问题是“项目”仅在 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;
            }
于 2013-10-02T11:58:06.813 回答
0

请参阅此主题这是因为 foreach 旨在遍历容器,确保每个项目都被访问一个,而不更改容器,以避免讨厌的副作用。

于 2013-10-03T20:43:25.287 回答
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;
            }
于 2013-10-02T12:20:14.613 回答