我有一个查询我试图运行,但我没有得到想要的结果。加入查询在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 };
在var出席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具有从EMPLOYEE表
编辑外键EMPID:我在我的最后一次尝试中也尝试过:
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 and ea。日期= '2012-01-11'' 应相当于 'SELECT * FROM employee_loginê 留在 e.emp_id = ea.EmpId 加入employee_attendance EA其中ea.dated =' 2012-01-11 “'。您的模型中的Employee类和EmployeeAttendance之间是否存在关联? – Firo 2012-01-11 11:48:16
@Firo对不起,我忘了把域。是的,在EmpId是外键 – Joy 2012-01-11 12:37:45