Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C从LINQ计算对象初始化期间的日期时间差_C#_Linq_Datetime - Fatal编程技术网

C# C从LINQ计算对象初始化期间的日期时间差

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

我的以下代码运行良好,它从SQL表返回数据:

    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;

    }
}