0

プロパティまたはそのラベル(参照されている.Parent.ChildLabelを意味する)が特定のラベル値と等しいデータベースからQueriedタイプのすべてのエンティティを取得しようとしています。ReferencedexampleLabelIdexampleId

私は使用してみました:

var result = nhibernateSession
    .Query<Queried>()
    .Where(queried => queried.SelfReferencing.GetSelfOrAncestor("exampleLabel") == exampleId)
    .ToList();

GetSelfOrAncestorしかし、「System.NotSupportedException」をスローします。おそらく、を SQLに変換する方法がわからないためです。

このメソッドは、呼び出されたインスタンスGetSelfOrAncestor(string label)の を返します。または、と等しい条件を満たすその祖先を返します。それ以外の場合は 0 を返します。IdSelfReferencingthis.Parent.ChildLabelexampleLabel

たとえば、次の図では、 のqueried.SelfReferencingを指している場合、 のオブジェクトの をLevel 2返しGetSelfOrAncestor("exampleLabel")ます。IdLevel 1

http://j.mp/Xl86OP

public class Queried
{
    public int Id { get; set; }
    public SelfReferencing Referenced { get; set; }
}

public class SelfReferencing
{
    public SelfReferencing Parent { get; set; }
    private IList<SelfReferencing > children = new List<SelfReferencing >();
    public virtual IList<SelfReferencing > Children
    {
        get
        {
            return children;
        }
        set
        {
            children = value;
        }
    }
    public string ChildLabel { get; set; }
}

これを達成する方法についての助けをいただければ幸いです:)

4

1 に答える 1

0

目的を達成するために、オブジェクト グラフを介してラベルを検索する SelfReferencing のメソッドを提供します。

次のようにする必要があります: (警告、まだテストされていません!)

    public bool ContainsLabel(string label)
    {
        if (this.ChildLabel.Equals(label))
        {
            return true;
        }
        else
        {
            foreach (var child in Children)
            {
                return child.ContainsLabel(label);
            }
        }

        return false;
    }

次のように使用できます。

var result = nhibernateSession
    .Query<Queried>()
    .Where(queried => queried.SelfReferencing.ContainsLabel("exampleLabel"))
    .ToList();

より読みやすいように編集しました。

于 2013-02-05T12:54:17.703 に答える