Linq 设置实体的值
我有一个未映射到数据库的模块,用于生成报告Linq 设置实体的值,linq,entity-framework,entity-framework-4,entity-framework-4.1,Linq,Entity Framework,Entity Framework 4,Entity Framework 4.1,我有一个未映射到数据库的模块,用于生成报告 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; } pu
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为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;
}
现在的问题是,在鼠标悬停到项上。OutTime
在foreach中出现值,但如果我从foreach中取出鼠标悬停到query
中,仍然有OutTime为null
。没有我设置的值。是否可以这样设置实体的值。或者我有什么问题
谢谢。问题是“项目”仅在foreach循环中可用,并且在每次迭代结束时被丢弃。如果要持久化该值,可以使用for循环,直接在可枚举的“查询”中设置该项:
for(int index=0;index
首先尝试使用方法first()执行linq查询:
请注意这一点,因为foreach旨在迭代一个容器,确保每个项目只访问一次,而不更改容器,以避免严重的副作用。我尝试了这一点,但在
query[index]
上出现了错误,表示“无法使用[]应用索引”对于“System.Linq.IQueryable”类型的表达式,变量查询的类型是什么?@andrey gubal,我也尝试使用.First(),但出现了相同的问题。
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;
}
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;
}