0

Linq to NHibernate を使用して C# に取り組んでいます。

2 セットのクラスとマッピングを定義しました。

public class Employee
{
    public int ID { get; set; }
    public string Name { get; set; }
}
<hibernate-mapping ...>
    <class name="Example.Employee, Example">
        <id name="ID">
            <generator class="assigned" />
        </id>
        <property name="Name" length="100" not-null="true" />
  </class>
</hibernate-mapping>
public class Department
{
    public DepartmentID ID { get; set; }
    public int EmployeeID
    {
        get { return this.ID.Employee.ID; }
        set { }
    }
    public string Name { get; set; }
}
<hibernate-mapping ...>
    <class name="Example.Department, Example">
        <composite-id name="ID">
            <key-many-to-one name="Employee" column="EmployeeID" />
            <key-property name="StartDate" />
        </composite-id>
        <property name="EmployeeID" not-null="true"/>
        <property name="Name" not-null="true"/>    
    </class>
</hibernate-mapping>

次のクエリを実行しました。

var result =
    from x in employeeQueryable
    join y in departmentQueryable on x.ID equals y.EmployeeID
    where y.ID.StartDate <= DateTime.Parse("2012/9/10")
    group y by y.EmployeeID into xy
    select xy.Max(a => a.ID.StartDate);

ただし、このクエリは次の例外をスローします。

クエリ ソースを特定できませんでした。ItemName = a、ItemType = Example.Department、式 = from Department a in [x]

employeeQueryabledepartmentQueryableが配列型 (NHibernate の linq ではない) の場合、このクエリは例外をスローしません。

私は何をすべきか?

4

1 に答える 1

0

Department の EmployeeID を削除して使用する

var result =
    from d in departmentQueryable 
    where d.ID.StartDate <= new DateTime(2012, 9, 10)
    group d by d.ID.Employee.Id into g
    select g.Max(d => d.ID.StartDate);
于 2012-09-19T13:40:56.030 に答える