У меня есть Linq-2-SQL, который обновляет IEnumerable<Locum> LeftOverLocums
перед внутренним циклом foreach
.Мне нужно добавить еще одно логическое предложение в часть Where
, но оно не имеет ничего общего с базой данных SQL.На самом деле, это функция полезности.Пожалуйста, смотрите две функции ниже.Первая - это основная функция, а вторая - та, которую мне нужно вставить в часть Where
.
private void PreferenceFindJobs(ref JobCustomList jobList) {
List<KeyValuePair<long, DateTime>> AlreadyPrefferedLocums = new List<KeyValuePair<long, DateTime>>();
List<long> LocumsFilteringIDs = SchedulerMatrixStorage.Resources.Items.Select(col => Convert.ToInt64(col.Id)).ToList();
IEnumerable<Locum> LeftOverLocums = null;
foreach (JobCustom oneJob in jobList) {
LeftOverLocums = from locums in DbContext.Locums
join availabilities in DbContext.Availabilities on new {
OID = locums.OID
} equals new {
OID = availabilities.LocumID
}
where
LocumsFilteringIDs.Contains(locums.OID) &&
locums.IsActive == true &&
locums.IsLocumsExciteBan == false &&
locums.IsGPHCBan == false &&
locums.IsRPSGBBan == false &&
locums.IsAdminMarkedComplete == true &&
availabilities.AvailabilityStatusID == 1 &&
availabilities.AvailableDate == oneJob.JobDate
select locums;
foreach (Locum oneLocum in LeftOverLocums) {
//This Locum can do this job
//Now check if he/she has been just alloted
if (AlreadyPrefferedLocums.Any(check => check.Key == oneLocum.OID && check.Value == oneJob.JobDate) == false) {
//No? Cool!
oneJob.LocumID = oneLocum.OID;
oneJob.LocumName = oneLocum.FirstName + " " + oneLocum.LastName;
//Add to the list to prevent double allocation
AlreadyPrefferedLocums.Add(new KeyValuePair<long, DateTime>(oneJob.LocumID, oneJob.JobDate));
} else {
continue;
}
}
}
}
public enum LocumType {
Pharmacist = 1,
Dispenser = 2,
AccreditedCheckingTechnician = 3
}
public static Boolean IsJobTypeOK(Enumerations.LocumType _Job, Enumerations.LocumType _Locum) {
bool ProcessResult;
switch (_Job) {
case Enumerations.LocumType.Pharmacist:
ProcessResult = _Locum == Enumerations.LocumType.Pharmacist;
break;
case Enumerations.LocumType.Dispenser:
ProcessResult = _Locum == Enumerations.LocumType.Dispenser;
break;
case Enumerations.LocumType.AccreditedCheckingTechnician:
ProcessResult = _Locum == Enumerations.LocumType.AccreditedCheckingTechnician || _Locum == Enumerations.LocumType.Dispenser;
break;
default:
ProcessResult = false;
break;
}
return ProcessResult;
}
Это мое желаемое предложение Where
:
where
IsJobTypeOK(oneJob.JobTypeID, locums.LocumTypeID) &&
LocumsFilteringIDs.Contains(locums.OID) &&
locums.IsActive == true &&
locums.IsLocumsExciteBan == false &&
locums.IsGPHCBan == false &&
locums.IsRPSGBBan == false &&
locums.IsAdminMarkedComplete == true &&
availabilities.AvailabilityStatusID == 1 &&
availabilities.AvailableDate == oneJob.JobDate