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_Datagridview_Foreign Keys - Fatal编程技术网

C# 比较数据网格视图列和列

C# 比较数据网格视图列和列,c#,linq,datagridview,foreign-keys,C#,Linq,Datagridview,Foreign Keys,我被困在一个部分,我不知道如何解决它。基本上,我有一张表,“轮班表”和另一张表“员工轮班表”。换档表具有换档启动和换档停止功能。employeeshift表具有开始时间和结束时间。我在比较轮班开始时间和开始时间。我使用外键将这两个表链接在一起,我问的问题是,我希望班次开始与开始时间和班次停止进行比较,与结束时间进行比较,并查看员工适合哪一个班次以及班次开始和班次停止将出现在员工符合条件的列中 目前我得到了一个代码,它只将两个表连接在一起,但不比较计时 private void LoadAllEm

我被困在一个部分,我不知道如何解决它。基本上,我有一张表,“轮班表”和另一张表“员工轮班表”。换档表具有换档启动和换档停止功能。employeeshift表具有开始时间和结束时间。我在比较轮班开始时间和开始时间。我使用外键将这两个表链接在一起,我问的问题是,我希望班次开始与开始时间和班次停止进行比较,与结束时间进行比较,并查看员工适合哪一个班次以及班次开始和班次停止将出现在员工符合条件的列中

目前我得到了一个代码,它只将两个表连接在一起,但不比较计时

private void LoadAllEmpShift()
    {
        using (testEntities Setupctx = new testEntities())
        {
            BindingSource BS = new BindingSource();
            var Viewemp = from ES in Setupctx.employeeshifts
                          join shifthour sh in Setupctx.shifthours on ES.ShiftHourID equals sh.idShiftHours
                         select new
                         {
                             ES.EmployeeShiftID,
                             ShiftHour_Start = sh.shiftTiming_start,
                             ShiftHour_Stop = sh.shiftTiming_stop,
                             ES.EmployeeName,
                             ES.StartTime,
                             ES.EndTime,
                             ES.Date
                         };


            BS.DataSource = Viewemp;
            dgvShift.DataSource = BS;
        }
    }
有人知道怎么做吗?

编辑:

你说你想找出员工工作时间与轮班时间的匹配点。如果有一些样本数据和您想要用来确定什么是好的轮班时间匹配的算法就好了

我在此假设,最好的方法是根据最近的轮班开始时间确定员工的开始时间

在下面的代码中,我使用
let
函数查看轮班时间,并找到最接近员工开始时间的轮班时间集

var Viewemp = from ES in Setupctx.employeeshifts
      join sh in Setupctx.shifthours on ES.ShiftHourID equals sh.idShiftHours 
         into shifts
      let diff = shifts
          .OrderBy (s => 
                    // this is the line that needs attention:
                    System.Math.Abs((int)(ES.StartTime - s.shiftTiming_start))
                   )
                   .First ()
      select new
      {
          ES.EmployeeShiftID,
          ShiftHour_Start = diff.shiftTiming_start,
          ShiftHour_Stop = diff.shiftTiming_stop,
          ES.EmployeeName,
          ES.StartTime,
          ES.EndTime,
          ES.Date
      };
更新 我在数据库中输入的StartTime和EndTime是字符串,而不是 时间

在上述代码中,重要的逻辑是找出
ES.StartTime
s.shiftiming\u start
之间的绝对值差异,最小的差异表示换档时间的最佳匹配。不幸的是,您的数据库将这些数据存储为字符串,您需要将它们作为数字进行比较

Linq to实体不包含将
string
转换为
int
函数的简单方法

我认为您的下一步将是研究如何将这些
string
值转换为
int
值。看看这个问题,因为我认为它可能会帮助你:


连接处有一个错误,指出由于我没有将shift\u Start和StartTime连接在一起,对“连接”的调用中存在类型干扰失败。我只想将StartTime与shift\u Start和match的列表进行比较,看看StartTime是否在您给我的第二个代码的时间范围内,这一行有一个错误,其中ES.StartTime>=sh.shiftiming\u Start&&ES.EndTime=或者您应该在这里使用,例如DiffSeconds。EntityFunctions是什么意思?我需要添加任何参考资料吗?