1

私はDTOSuachのリストを次のように持っています:

 Public Class UKey
{
    public Int64 Key{ get; set; }

}

Public Class Test : UKey
{
    public Int64? CityId  { get; set; }
    public Test2  test2{ get; set; }
}
Public Class Test2 : UKey
{
    public Int64? CountryId { get; set; }
    public Test3 test3 {get;set;}
}
public Class Test3 :UKey
{

}

DTOをネストしました。たとえば、クラスtestにはクラスtest 2のメンバーがあり、クラスtest2にはタイプclass test 3のメンバーがあります。各クラスには独自のキーがあり、このキーはどのクラスでも繰り返すことができません。GUidのようなものです。 。Class Testにクエリを実行して、指定された一意のキーを持つこれらのネストされたDtoの1つだけを見つけたいと思います。

4

2 に答える 2

1

testsオブジェクトがIEnumerable<Test>、オブジェクトのセットであると仮定しTestます。

tests.SingleOrDefault(q => q.test2.Key == id || q.test2.test3.Key == id);

更新:再帰検索を適用する必要があります。基本クラスを少し変更しました。

public class UKey
{
    public Int64 Key { get; set; }
    public UKey ReferencedEntity { get; set; }
}

および検索機能:

private UKey Search(UKey entity, Int64 id)
    {
        UKey result = null;
        if (entity.Key == id)
            result = entity;
        else
        {
            result = this.Search(entity.ReferencedEntity,id);
        }
        return result;
    }
于 2013-01-24T07:29:01.897 に答える
0

答えはおそらく再帰の形式を使用することです。ベースクラスにメソッドを作成し、FindKeyそれに応じて派生クラスに実装すると、クエリを簡略化できます。

//given: 
//'tests' is a IEnumerable<UKey>
//'g' = a guid you are looking for
tests.SingleOrDefault(q => q.FindKey(g));

クラスの実装は次のようになります。

public abstract class UKey
{              
    public Guid Key{ get; set; }
    public abstract bool FindKey(Guid g);
}

public class Test : UKey
{
    public Int64? CityId  { get; set; }
    public Test2  Test2{ get; set; }

    public override bool FindKey(Guid g){
        return Key == g || (Test2!= null && Test2.FindKey(g));
    }   
}

/*etc.. implement the FindKey method on all you derived classes*/
于 2013-01-24T08:53:28.903 に答える