c# select 来自模型的类型

c# select from model by type

我想知道是否有一种方法可以根据类型从模型中提取 select 元素。这是模型:

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
}

我想要的是这样的:

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

因此基于此,验证签名(决策模型内)是否为空。

欢迎任何帮助。

像这样:

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));
    }
}

只需将 object 替换为 BaseModel

要获取特定类型的所有属性,您需要使用反射。例如,您可以执行以下操作:

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

之后你可以遍历属性并做任何你想做的事情。

如果您需要检查一个对象(而不是类型本身),您需要调用以下如果 Progress 是用户对象的 属性:

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