比较C#ASP.NET MVC LINQ实体框架中的两个列表
正如标题所说,我正试图比较已盖销时间和已盖销时间 我有一个flex变量,它将获得一个工作日(8h)内这两个日期之间的差值 “如果我在08:00盖章,在17:00盖章,我的弹性应为+1(h)” 型号:比较C#ASP.NET MVC LINQ实体框架中的两个列表,c#,asp.net,asp.net-mvc,linq,C#,Asp.net,Asp.net Mvc,Linq,正如标题所说,我正试图比较已盖销时间和已盖销时间 我有一个flex变量,它将获得一个工作日(8h)内这两个日期之间的差值 “如果我在08:00盖章,在17:00盖章,我的弹性应为+1(h)” 型号: public class FlexModel { public List<User> Users { get; set; } public List<Stamping> Stampings { get; set; } public decimal F
public class FlexModel
{
public List<User> Users { get; set; }
public List<Stamping> Stampings { get; set; }
public decimal FlexTime { get; set; }
}
public partial class Stamping
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public int UserId { get; set; }
[Required]
[DataType(DataType.DateTime)]
public DateTime Timestamp { get; set; }
[Required]
[StringLength(3)]
public string StampingType { get; set; }
public virtual User User { get; set; }
}
请提供帮助。您可以这样关联列表:
var attendance = from sin in stampIn
select new
{
StampIn = sin,
StampOut = stampOut.FirstOrDefault(sout =>
sout.Timestamp > sin.Timestamp)
};
var flexitime = from att in attendance
select new
{
TimeIn = att.StampIn.Timestamp,
TimeOut = att.StampOut == null ? (DateTime?)null : att.StampOut.Timestamp,
TotalTime = att.StampOut == null ? 0 :
att.StampOut.Timestamp.Subtract(att.StampIn.Timestamp).TotalHours
};
这将为您提供stampin与stampout事件的列表(尽管stampout可能为空)。然后你需要这样计算弹性时间:
var attendance = from sin in stampIn
select new
{
StampIn = sin,
StampOut = stampOut.FirstOrDefault(sout =>
sout.Timestamp > sin.Timestamp)
};
var flexitime = from att in attendance
select new
{
TimeIn = att.StampIn.Timestamp,
TimeOut = att.StampOut == null ? (DateTime?)null : att.StampOut.Timestamp,
TotalTime = att.StampOut == null ? 0 :
att.StampOut.Timestamp.Subtract(att.StampIn.Timestamp).TotalHours
};
您现在可以将其转换为FlexModel
对象(我只填写FlexTime
属性,因为我不确定您需要其他属性的方式/原因):
显示冲压类定义我刚刚编辑过!请看一看…你的类实现在我看来不太好。如果
TimeOut
和TimeIn
都是空的,TimeIn
不空的是TimeIn
如果两者都是,那么TimeOut
对我的计算没有帮助,先生。。。我需要知道如何在几个小时内将这两个列表相互比较。在这两个列表中,您将如何关联timein和timout用户考虑一下我很抱歉,但结果不起作用。我需要更多关于如何使用这些变量的具体细节…嗯,flex值在视图中仍然显示为0。。。我不太清楚为什么计算不起作用!FlexTime=FlexTime.Sum(f=>f.TotalTime)-“无法将源类型'double'转换为目标类型'decimal'是的,它可以工作。但现在的问题是,无论用户在什么时间戳入或戳出,它都会加起来。加起来必须超过8小时,然后才应该使用差值。当然,如果当天少于8小时,则反之亦然。。。
var workDay = 8;
var flexModel = new FlexModel
{
FlexTime = Convert.ToDecimal(flexitime
.Sum(f => f.TotalTime - workDay))
};
return View(flexModel);