我想通过 HasMany 映射中子级的属性来限制列表。
我有一个Customer像这样的对象:
public class Customer
{
    public virtual int CustomerId { get; set; }
    public virtual IList<RecurringPayment> Recurring { get; set; }
}
然后我的反复出现
public class RecurringPayment
{
    public virtual int RecurringPaymentId{ get; set; }
    public virtual ItemBase OriginalItem { get; set; }
}
ItemBase有一个类型鉴别器,但这不相关。这是部分:
public class ItemBase
{
    public virtual int ItemId { get; set; }
    public virtual ItemStatus Status { get; set; }
}
ItemStatus是一个枚举
所以,让我们向后看一下映射。首先项目
public sealed class ItemBaseMap : ClassMap<ItemBase>
{
    public ItemBaseMap()
    {
        //omit the non-important parts
        Map(x => x.Status, "Status").CustomType<ItemStatus>();
    }
}
现在,定期付款
public sealed class RecrringPaymentMap: ClassMap<RecurringPayment>
{
    public RecrringPaymentMap()
    {
        //omit the non-important parts
        References<ItemBase>(x => x.OriginalItem, "OriginalItemId");
    }
}
最后,我的客户映射。
public sealed class CustomerMap: ClassMap<Customer>
{
    public CustomerMap()
    {
        //omit the non-important parts
        HasMany<RecurringPayment>(x => x.Recurring)
                .KeyColumn("CustomerId")
                .Where("OriginalItem.Status != 6")
                .Inverse()
                .Fetch.Subselect();
    }
}
我的问题来自HasMany我的客户映射中的 where 子句。如果我在上面使用字符串 where 子句。我收到一个错误:
System.Data.SqlClient.SqlException:无法绑定多部分标识符“OriginalItem.Status”。
如果我切换它并使用 linq 执行 where 子句,因为.Where(y => y.OriginalItem.Status != ItemStatus.Deleted)我得到一个不同的错误:
System.InvalidOperationException:从范围“”引用的“Namespace.RecurringPayment”类型的变量“y”,但未定义
那么,如何将我的定期付款列表限制为仅包含未删除原始项目的那些(状态 6)?