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