C# 如何设置实体的值

C# 如何设置实体的值,c#,linq,entity-framework,entity-framework-4.1,C#,Linq,Entity Framework,Entity Framework 4.1,我有一个未映射到数据库(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;

我有一个未映射到数据库(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),报告的一些属性保持为null(因为
OutTime为null

现在我想要迭代查询项(类型为
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;
            }
现在的问题是,在鼠标悬停到
项上。OutTime
在foreach中出现值,但如果我从foreach中取出鼠标悬停到
query
中,仍然有
OutTime为null
。没有我设置的值。是否可以这样设置实体的值。或者我有什么问题


谢谢。

在本地保存查询结果,然后再对其进行迭代:

 var query = ....ToList();
在本例中,查询执行了两次—第一次是在更新
OutTime
属性时,第二次是在查询项上迭代时(在调试器中查看或在UI中显示)。所以,当第二次执行查询时,您会看到一组全新的对象作为查询结果(它们具有原始的
null
OutTime


BTW考虑使用单个连接查询代替对主查询中的每个项目进行单独的OutTalk查询。

尝试这样的代码:

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

首先感谢您的回复。我尝试使用JOIN,但由于InTime和OutTime都来自模型CHECKINOUT的CHECKTIME,具体取决于CHECKTYPE(I或O)。如果CHECKTYPE为I,则CHECKTIME为InTime,如果CHECKTYPE为O,则CHECKTIME为OutTime。我无法在同一查询中同时检查I和O的CHECKTYPE,因此我使用子查询。有没有其他方法可以做到这一点。请告诉我我有问题。@link2jagann好的,我会考虑加入查询,但您需要提供您的
query
定义。我的答案解决了你的问题吗?没有。还有其他方法使用列表或其他什么吗?等等,它似乎正在工作(之前我做了一些更改,所以它不工作)。非常感谢你。我不知道我是如何/为什么在查询中遗漏了.ToList()。同一问题没有任何变化。一旦设置了值,就不应该覆盖它。真奇怪(
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; }
    }
}