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がnullになることです。私は試した :
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では問題ありません
オブジェクトのタイプを知らずにプロパティインターフェイスにアクセスするにはどうすればよいですか?