c# - 是否可以使用反射从通用实体访问属性(按名称)?

标签 c# generics reflection

我想从泛型类 T 创建一个泛型查询。有没有办法使用反射或其他方法来实现类似的查询?

public class DAO<T>        
    where T : class
{
    protected ObjectSet<T> Entities
    {
        get
        {
            return myContextThatIsInSomewhere.CreateObjectSet<T>();
        }
    }

    public IList<T> SelectBy(object fields)
    {
        if (fields == null)
        {
            throw new ArgumentNullException("fields");
        }

        var query = from e in this.Entities                    
                    select e;

        foreach (var field in fields.GetType().GetFields())
        {
            query = from e in this.Entities
                    // Do something like that:                   
                    where e.(field.Name) == field.GetValue()
                    select e;         
        }

        return query.ToList();
    }
}

最佳答案

制作SelectBy采取Expression<Func<T, bool>> (称之为 predicate )然后你就可以说

var query = this.Entities.Where(predicate);

您可以传递 Expression<Func<T, bool>> 的实例通过说

x => x.Foo == foo

例如。

关于c# - 是否可以使用反射从通用实体访问属性(按名称)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8988221/

相关文章:

arrays - Swift:扩展 [<SomeType<T>?] 来生成 [<T>?] 可能吗?

java - 关于java泛型的问题

reflection - 如何在 SWI-Prolog 中列出模块内的子句?

c# - 在 WPF 文本框上调用 Select() 不执行任何操作

c# - 检测到无法访问的代码

c# - 设置默认日期时间格式 c#

c# - 在c#中将动态对象转换为动态类型的数组

c# - MySQL synax 插入新数据时出错 c#

haskell - 如何使用 Template Haskell 构建多态结构?

ruby - 为什么是 Module.methods() 和 respond_to?在 irb 中的工作方式与在脚本中不同?