実行しようとしているクエリがありますが、希望の結果が得られません。Nhibernate基準またはNhibernate Linqでクエリに参加します
select * from employee_login e
left join employee_attendance ea on
e.emp_id = ea.EmpId and dated = '2012-01-11'
私はNHibernateはしてみましたLINQクエリは、VaRの出席resultviewで
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 };
です。どのようにこれらの2つのことを達成できますか?
- 左ジョイン結果の上に参加しないで従業員と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などの外部キーがあります。私も最後の試行でこれを試しました:
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から*選択と同等でなければなりません e.emp_id = ea.EmpId どこea.dated =上employee_attendanceのEAに参加' 左2012-01-11 ''。あなたのモデルにEmployeeクラスとEmployeeAttendanceの間に関連がありますか? – Firo
@Firo申し訳ありません、私はドメインを入れるのを忘れていました。はい、EmpIdが外部キーであるモデルにEmployee ClassとEmployeeAttendanceの間の関連があります – Joy