C# C从LINQ计算对象初始化期间的日期时间差
我的以下代码运行良好,它从SQL表返回数据:C# C从LINQ计算对象初始化期间的日期时间差,c#,linq,datetime,C#,Linq,Datetime,我的以下代码运行良好,它从SQL表返回数据: List<TypeA> Class1 = ( from rec in Entity.Context.Table select new Class1 { NAME = rec.name, FIRSTDATE = rec.firstdate, LASTDATE = rec.lastdate
List<TypeA> Class1 = ( from rec in Entity.Context.Table select new Class1
{ NAME = rec.name,
FIRSTDATE = rec.firstdate,
LASTDATE = rec.lastdate
//my func CalcTimeDiff, doesnt work
ElapsedMin = CalcTimeDiff(LASTDATE, FIRSTDATE)
}).ToList();
public class Class1
{
public string NAME = {get; set;}
public Nullable<DateTime> FIRSTDATE = {get; set;}
public Nullable<DateTime> LASTDATE = {get; set;}
public int ElapsedMin = {get; set;}
// My function to calculate time difference
public int CalcTimeDiff ( DateTime A, DateTime B)
{
TimeSpan Diff = A - B;
int MinElapsed = (int)Diff.TotalMinutes;
return MinElapsed;
}
}
我正在寻找的是向Class1类添加方法来计算LASTDATE和FIRSTDATE之间的DateTime差,并在Class1初始化中调用它。但仍然没有运气,得到错误我不能使用非静态字段。。。知道如何管理它吗?除非您需要将ElapsedMin设置为可设置状态,否则我不明白您为什么要这样做,只需将其设置为计算属性即可:
public int ElapsedMin => CalcTimeDiff(FirstDate, LastDate);
或
你现在做的有点乱。谨慎的机智是不可取的
var resultList = (from rec
in recordList
select new Class1
{
NAME = rec.name,
FIRSTDATE = rec.firstdate,
LASTDATE = rec.lastdate,
ElapsedMin = (int)(rec.lastdate.Value - rec.firstdate.Value).TotalMinutes
}).ToList();
我想你是在看这样的事情
public class Class1
{
public string NAME { get; set; }
public Nullable<DateTime> FIRSTDATE { get; set; }
public Nullable<DateTime> LASTDATE { get; set; }
public int ElapsedMin { get; set; }
public Class1(DateTime LD, DateTime FD)
{
TimeSpan Diff = LD - FD;
this.ElapsedMin = (int)Diff.TotalMinutes;
}
}
现在还不清楚你想在这里实现什么。不过,我绝对建议您开始遵循正常的.NET命名约定。您可以使用构造函数并在其内部调用不编译属性的方法。from rec。。。。我怀疑您的代码是否运行良好,并且在LASTDATE=rec.LASTDATE之后还缺少一个逗号。在VisualStudio中,格式化代码很容易。只需按Ctrl-E-D即可。此处不能应用TotalMinutes。这将是TimeSpan类提供的..@smirQ True。如果不想检查空值,请使用已编辑的版本。否则,请使用第一个版本并检查空值。在rec.lastdate或rec.firstdate上没有可用的.Value方法。这些是DateTime SQL表列引用。如果它们是DateTime SQL表列,并且字段标记为NULL,则此减法将不起作用,这就是我将它们设置为可空的原因。在本例中,可空字段具有.Value属性。如果它们不可为null,只需删除.Value,这个linq查询就会工作。再次小心地使用DBNulls
public class Class1
{
public string NAME { get; set; }
public Nullable<DateTime> FIRSTDATE { get; set; }
public Nullable<DateTime> LASTDATE { get; set; }
public int ElapsedMin { get; set; }
public Class1(DateTime LD, DateTime FD)
{
TimeSpan Diff = LD - FD;
this.ElapsedMin = (int)Diff.TotalMinutes;
}
}
{
public void Test()
{
Class1 c1 = new Class1(DateTime.Now ,Convert.ToDateTime("01-23-1992"));
int elapsedMin = c1.ElapsedMin;
}
}