ActionBase、ActionA、ActionB 和 ActionC 是实体(来自数据库)。ActionA、ActionB 和 ActionC 是 ActionBase 的派生类型。
ActionB 和 ActionC 使用 SpecialProperty 实现 ISpecialAction。
前任 :
public interface ISpecialAction
{
Guid SpecialProperty { get; }
}
public partial class ActionBase
{
public objectX OnePropertyBase { get; set; }
}
public partial class ActionA : ActionBase
{
public objectY OnePropertyA { get; set; }
}
public partial class ActionB:ActionBase,ISpecialAction
{
public objectZ OnePropertyB { get; set; }
public Guid SpecialProperty
{
get
{
return OnePropertyB.ID;
}
}
}
public partial class ActionC : ActionBase ,ISpecialAction
{
public objectW OnePropertyC { get; set; }
public Guid SpecialProperty
{
get
{
return OnePropertyC.ID;
}
}
}
我的问题是 SpecialProperty 是从对象的其他属性(ActionB 或 ActionC)构建的,并且当转换(到 ISpecialAction)完成时,OtherProperty 和 OtherProperty2 为空。我试过了 :
GetActionBase().ToList().Where(x=>x is ISpecialAction && ((dynamic) x).SpecialProperty== p_SpecialProperty);
GetActionBase().ToList().Where(x=>x is ISpecialAction && ((ISpecialAction) x).SpecialProperty== p_SpecialProperty);
GetActionBase().ToList().OfType<ISpecialAction>().Where(x => x.SpecialProperty== p_SpecialProperty).Cast<ActionBase>();
return GetActionOnGoing().ToList().OfType<ICityAction>().Cast<ActionBase>().Where(x => ((dynamic)x).CityId == p_CityId);
备注:OfType<>
不适用于 Linq 中的接口到实体,但在 Linq 中可以到对象
如何在不知道对象类型的情况下访问我的属性接口?