Так что я делаю запрос, чтобы получить Отсутствие от сотрудника (через его идентификатор) определенного года (2015 в данном случае).Этот запрос LINQ неверен?
Это БД модель, и эти классы:
[Serializable]
public class Absence
{
public Int32 IDAbsence;
public Int32 IDEmployee;
public Int32 Period;
public DateTime BeginDate;
public DateTime? EndDate;
public AbsenceType AbsenceType;
public AbsenceStatus AbsenceStatus;
public List<Justification> Justifications;
public List<Notification> Notifications;
public Absence() { }
public Absence(Int32 IDAbsence, Int32 IDEmployee, Int32 Period, DateTime BeginDate, DateTime? EndDate, AbsenceType AbsenceType, AbsenceStatus AbsenceStatus, List<Justification> Justifications, List<Notification> Notifications)
{
this.IDAbsence = IDAbsence;
this.IDEmployee = IDEmployee;
this.Period = Period;
this.BeginDate = BeginDate;
this.EndDate = EndDate;
this.AbsenceType = AbsenceType;
this.AbsenceStatus = AbsenceStatus;
this.Justifications = Justifications;
this.Notifications = Notifications;
}
}
[Serializable]
public class TimePeriod
{
public Int32 IDTimePeriod;
public DateTime StartTime;
public DateTime EndTime;
public TimePeriod() { }
public TimePeriod(Int32 IDTimePeriod, DateTime StartTime, DateTime EndTime)
{
this.IDTimePeriod = IDTimePeriod;
this.StartTime = StartTime;
this.EndTime = EndTime;
}
}
TimePeriod
первичный ключ (IDTimePeriod
) должна быть ссылка для внешнего ключа периода в отсутствие таблице, но Я не могу создать внешний ключ для Period (да, DB, с которым я работаю, довольно запутанным ...).
Это мой запрос LINQ:
public static List<Tuple<Absence,TimePeriod>> GetAbsencesByEmployeeIDAndYear(Int32 employeeID, Int32 year) {
List<Tuple<Absence,TimePeriod>> absences = dataContext.Absences.Join(dataContext.TimePeriods,
abs => abs.Period,
tps => tps.IDTimePeriod,
(abs, tps) => new Tuple<Absence, TimePeriod>(abs, tps))
.Where(abstps => abstps.Item1.Employee.IDEmployee == employeeID && abstps.Item2.StartTime.Year == year).ToList();
return absences;
}
И это ошибка:
Object reference not set to an instance of an object.
Как ни странно, потому что я посмотрел в БД, и есть записи отсутствий для данного сотрудника в 2015 году с соответствующим периодом времени. Нет случаев, когда Period не нашел соответствующий IDTimePeriod.
Что мне не хватает?
, если этот запрос является правильным, вы получите ожидаемый результат –
Вы уверены, вы инициализировать DataContext? –
Должен ли 'Employee.IDEmployee' быть' IDEmployee'? – DavidG