2013-10-03 22 views
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; } 
} 

我生成一个查询,并填写一些属性(用户标识,DateToCal,姓名,职务,银泰)的Report和报告的一些属性保持为空(为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.OutTime与在foreach中出现值,但如果我从foreach和mousehover到query仍然有OutTime is null。没有出现我设定的价值。这是可能的,以这种方式来设置实体的价值。或者我的问题是什么?

谢谢。

+0

一旦你设置的值,它不应该被覆盖。真奇怪。 :( –

回答

1

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

var query = ....ToList(); 

看起来像你的情况的查询执行两次 - 当你正在更新OutTime财产第一次,第二次,当你迭代查询项目(要么在调试器中查看,要么在UI中显示)。因此,当第二次执行查询时,会看到全新的一组对象作为查询结果(其原始null值为OutTime)。

BTW考虑使用单个JOIN查询,而不是为主查询中的每个项目分别进行外部时间查询。

+0

首先感谢您的回应。我尝试使用JOIN,但因为InTime和OutTime都来自CHECKINOUT的CHECKTIME,取决于CHECKTYPE(I或O)。如果CHECKTYPE是I CHECKTIME将是InTime,并且如果CHECKTYPE是O CHECKTIME我将无法在同一个查询中检查CHECKTYPE,因此我使用子查询。是否有其他方法可以做到这一点。请告诉我我有问题。 – link2jagann

+0

@ link2jagann好的,我会考虑加入查询,但你需要提供你的'查询'定义。我的答案解决了你的问题? –

+0

没有任何其他方式使用列表或什么? – link2jagann

0

try代码是这样的:

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

同样的问题没有改变。 – link2jagann