2017-05-16 1 views
0

タイプに基づいてモデルから要素を選択する方法があるのだろうかと思います。ここではモデルです:。(意思決定モデル内の)署名がnullであるかどうかを検証するため、それに基づいてc#タイプ別にモデルから選択

var decisions = user.Progress.where(x=>x.type == Decision); 

:私が欲しいもの

public class Progress : BaseModel 
{ 
    public DateTime? LimitTime { get; set; } 
    public Status Status { get; set; } 
    public virtual Decision ApplicationDecision { get; set; } 
    public virtual Decision ValidationDecision{ get; set; } 
    public virtual Decision FinalDEcision { get; set; } 

    public virtual Outcome FinalChecksOutcome { get; set; } 
} 

public enum Status 
{ 
    Active, 
    Rejected 
    Completed 
} 

のようなものです

助けを歓迎します。このような

+1

あなたはまだ反射して何かをしようとしましたか? –

+0

まだ何も反映していません – George

答えて

1

objectを交換してください。たとえば、次のようにすることができます。

var decisions = typeof(Progress).GetProperties().Where(p => p.PropertyType == typeof(Decision)).ToArray(); 

その後、プロパティをループして必要な処理を実行できます。

あなたがオブジェクト(とないタイプそのもの)を検査する必要がある場合は進捗状況は、ユーザーオブジェクトのプロパティである場合は、以下を呼び出す必要があります):

var decisions = user.Progress.GetType().GetProperties().Where(p => p.PropertyType == typeof(Decision)).ToArray(); 
+0

これはかなりうまくいきました。ありがとうございました。 – George

+0

あなたは大歓迎です! –

3

何か:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var t = new Container {Name = "Test", P1 = new MyType {Val = "1"}, P2 = new MyType {Val = "2"} }; 

     var res = t.OfType<MyType>(); 
    } 

    public class Container 
    { 
     public string Name { get; set; } 
     public MyType P1 { get; set; } 
     public MyType P2 { get; set; } 
    } 
    public class MyType 
    { 
     public string Val { get; set; } 
    } 
} 

public static class ObjectExtensions 
{ 
    public static Dictionary<string, T> OfType<T>(this object o) 
    { 
     return o.GetType().GetProperties().Where(p => p.PropertyType == typeof(T)).ToDictionary(p => p.Name, p => (T)p.GetValue(o)); 
    } 
} 

ちょうどあなたがリフレクションを使用する必要がある特定のタイプのすべてのプロパティを取得するにはBaseModel

関連する問題