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" をバインドできませんでした。

.Where(y => y.OriginalItem.Status != ItemStatus.Deleted)別のエラーが発生するので、それを切り替えて linq で where 句を実行すると、次のようになります。

System.InvalidOperationException : タイプ 'Namespace.RecurringPayment' の変数 'y' がスコープ '' から参照されていますが、定義されていません

では、定期的な支払いのリストを、元のアイテムが削除されていないもの (ステータス 6) のみに制限するにはどうすればよいですか?

4

0 に答える 0