LinQ中的动态变量

时间:2016-05-17 22:38:59

标签: c# entity-framework

我需要与linq相当于dynamic的东西。 我想从数据库中的类型T返回所有活动数据。问题是并非所有表都有" Active"。所以我需要这样的东西:

public static List<T> get<T>() where T : class
{
    if (typeof(T).GetProperty("Activo")!=null)
    {
        return (from c in context.Set<T>().AsQueryable()
                where c.Activo //I know for sure it have an Activo property
                select c).ToList();
    }
    else
    {
    return (from c in context.Set<T>().AsQueryable()
            select c).ToList();
    }         
}

如何强制LinQ使用&#34; Activo&#34;属性?就像使用dynamic变量

一样

接口是不可能的,因为我需要传递给无法实现它的方法类型

1 个答案:

答案 0 :(得分:0)

你必须使用

public static List<T> get<T>() where T : class
{
    var type = typeof(T);
    var prop = type.GetProperty("Activo")
    if (prop!=null)
    {
        return (from c in context.Set<T>().AsQueryable()
            where prop.GetValue(c, null)=="xyz123"
            select c).ToList();
    }
    else
    {
        return (from c in context.Set<T>().AsQueryable()
            select c).ToList();
    }         
}
但是,我不喜欢使用反射,因为如果你改变了属性的名称,反射代码就会破坏。我更喜欢将实现特定属性的interfact挂钩到类中,然后查看我的实例(比较)是否实现了该接口。