1

我想通过 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)?

4

0 回答 0