簡體   English   中英

比較數據網格視圖列和列

[英]Comparing Data grid view column and columns

我只停留在其中一個我不知道如何解決它的部分。 基本上,我有一個表“ Shifthours”和另一個表“ employeeshift”。 Shifthours表具有shift_Start和shift_Stop。 employeeshift表具有StartTime和EndTime。 我正在比較shift_Start和StartTime。 我已使用外鍵將這兩個表鏈接在一起,我問的問題是我想讓shift_Start與StartTime進行比較,而shift_Stop與EndTime進行比較,並查看適合員工的班次,並且shift_Start和shift_Stop將出現在列中該雇員有資格。

目前,我得到的代碼僅將2個表連接在一起,而沒有比較時間。

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.StartTimes.shiftTiming_start之間的絕對值差,並且最小的差表明班次小時的最佳匹配。 不幸的是,您的數據庫將此數據存儲為字符串,因此您需要將它們作為數字進行比較。

Linq-to-Entities不包含將string轉換為int函數的簡單方法。

我認為您的下一步將是研究如何將這些string值轉換為int值。 看一下這個問題,因為我認為它可以幫助您:

在EF 4.0中將字符串轉換為Int

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM