У меня есть запрос, который я пытаюсь запустить, но я не получаю желаемого результата.Присоединиться к запросу в критериях Nhibernate или в Nhibernate Linq
select * from employee_login e
left join employee_attendance ea on
e.emp_id = ea.EmpId and dated = '2012-01-11'
Запрос Linq, который я пытался с NHibernate является
var attendance = from emp in session.Query<Employee>()
join empatten in session.Query<EmployeeAttendance>()
on emp.emp_id equals empatten.EmpId into atts
from ur in atts.DefaultIfEmpty()
select new { ur };
В посещаемости вар resultview. Как я могу достичь этих двух вещей?
- левый присоединиться к более сотрудника и employeeattendance (работник левая таблица)
- а и условие на объединение не над присоединиться к результату.
Я довольно новичок в этой ситуации с использованием Linq или отдельных критериев; предпочтительным ответом будет отдельный критерий.
Вот модели:
public class EmployeeAttendance
{
public virtual string No_ { get; set; }
public virtual Employee Employee { get; set; }
}
public class Employee
{
public virtual string emp_id { get; set; }
public virtual ISet<EmployeeAttendance> Attendances { get; set; }
public Employee()
{
Attendances = new HashedSet<EmployeeAttendance>();
}
}
Это отображение:
public class EmployeeAttendanceMap:ClassMap<EmployeeAttendance>
{
public EmployeeAttendanceMap()
{
Table("Employee_Attendance");
Id(x => x.No_).GeneratedBy.Assigned();
References(x => x.Employee).Column("emp_id");
}
}
public class EmployeeMap : ClassMap<Employee>
{
public EmployeeMap()
{
Table("employee_login");
Id(x => x.emp_id).Column("emp_id").GeneratedBy.Assigned();
HasMany(x => x.Attendances).KeyColumn("No_").Cascade.All();
}
}
Работник является основной таблицей и AttendanceLeave имеет внешний ключ, как EmpId из таблицы Employee
Edit: Я попробовал это также в своей последней попытке:
ICriteria criteria = session.CreateCriteria(typeof(Employee), "emp")
.CreateAlias("EmployeeAttendance", "Attendance", CriteriaSpecification.LeftJoin
, Restrictions.Eq("Attendance.Dated", DateTime.Parse("2012-1-11")));
но я в конечном итоге получить ошибки как:
не смог решить свойство: EmployeeAttendance из: Royal.Data.Core.Domain.Employee
'select * from employee_login e left join employee_attendance ea on e.emp_id = ea.EmpId и ea.датированные = '2012-01-11'' должно быть эквивалентно 'выбрать * из employee_login е осталось присоединиться employee_attendance еа на e.emp_id = ea.EmpId где ea.dated =' 2012-01-11 «'. Существует ли какая-либо Ассоциация между классом Employee и EmployeeAttendance в вашей модели? – Firo
@Firo жаль, что я забыл поставить домены. да, есть ассоциация между Employee Class и EmployeeAttendance в модели, где EmpId является внешним ключом – Joy