将属性名称作为字符串传递到方法中 .NET

2024-05-27

我正在将 LINQ to SQL 用于 .NET MVC 应用程序。

在我的数据库中,我有一堆包含“Y”或“N”值的列。

我正在尝试编写一个通用方法,该方法将返回数据库中的所有记录columnName == 'Y'

到目前为止我已经得到了这个

public IQueryable<Approved> ReturnRecordsByObjectiveFlag(string columnName)
{       
    return from approved in db.Approved
           where approved.GetType().GetProperties().Where(x => x.Name.Equals(columnName)).Equals("Y")
           select approved;
}

但这给了我这个错误

“System.Reflection.MemberInfo”的成员访问“System.String Name”在类型“System.Reflection.PropertyInfo[]”上不合法。

知道我哪里可能出错吗?

谢谢。


public IQueryable<Approved> ReturnRecordsByObjectiveFlag(string columnName)
{   
    var param = Expression.Parameter(typeof(Approved), "x");
    var predicate = Expression.Lambda<Func<Approved,bool>>(
        Expression.Equal(
            Expression.PropertyOrField(param, columnName),
            Expression.Constant("Y")
        ), param);
    return db.Approved.Where(predicate);
}

编辑;如果属性实际上是char?, i.e. 'Y' not "Y", then:

public IQueryable<Approved> ReturnRecordsByObjectiveFlag(string columnName)
{
    var param = Expression.Parameter(typeof(Approved), "x");
    Expression prop;
    var predicate = Expression.Lambda<Func<Approved, bool>>(
        Expression.Equal(
            (prop = Expression.PropertyOrField(param, columnName)),
            Expression.Constant(prop.Type == typeof(string) ?
                (object)"Y" : (object)'Y', prop.Type)
        ), param);
    return db.Approved.Where(predicate);
}

(这现在可以应对所有string, char and char?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将属性名称作为字符串传递到方法中 .NET 的相关文章

随机推荐