0

我有未映射到数据库(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; }
}

我生成了一个查询并填写了一些属性(USERID、DateToCal、Name、Position、Intime),Report并且 Report 的一些属性仍然为空( as OutTime is null

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;
            }

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

谢谢你。

4

2 回答 2

1

在迭代查询结果之前在本地保存查询结果:

 var query = ....ToList();

看起来在您的情况下查询执行了两次 - 第一次是在更新OutTime属性时,第二次是在您迭代查询项时(在调试器中查看或在 UI 中显示)。因此,当第二次执行查询时,您会看到一组全新的对象作为查询结果(其原始null值为OutTime)。

顺便说一句,考虑使用单个 JOIN 查询,而不是对主查询中的每个项目进行单独的超时查询。

于 2013-10-03T07:03:15.250 回答
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; }
    }
}
于 2013-10-03T07:12:10.123 回答