C# 如何设置实体的值
我有一个未映射到数据库(sql server)的模块,它仅用于生成报告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;
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; }
}
}