我有DTO Suach列表:
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有类test class 3的成员,每个类都有自己的唯一键,这个键不能在任何一个中重复,像GUID这样的东西。 我想查询Class Test,找到具有给定唯一键的这些嵌套Dtos中的一个。
答案 0 :(得分: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;
}
答案 1 :(得分:0)
答案可能是使用recursion的形式:如果在基类上创建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*/