[英]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.StartTime
和s.shiftTiming_start
之間的絕對值差,並且最小的差表明班次小時的最佳匹配。 不幸的是,您的數據庫將此數據存儲為字符串,因此您需要將它們作為數字進行比較。
Linq-to-Entities不包含將string
轉換為int
函數的簡單方法。
我認為您的下一步將是研究如何將這些string
值轉換為int
值。 看一下這個問題,因為我認為它可以幫助您:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.