Joh*_*n S 4 linq entity-framework predicatebuilder
我有一个包含可变数量的字段名称的列表.我想循环遍历此列表并创建一个谓词,过滤所有在该字段中具有值的记录.
foreach (var field in FieldNames)
{
myPredicate= myPredicate.And(m => m.*field*!=null );
}
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么做.有什么建议?
TIA
如果您在编译时知道属性是什么,则只能编写lambda表达式.由于您显然不知道要检查的字段是什么,因此您必须手动创建表达式.
你需要一个像这样的辅助函数来生成表达式:
public Expression<Func<T, bool>> GenerateFieldNotNullExpression<T>(string fieldName)
{
var parameter = Expression.Parameter(typeof(T), "m");
// m
var fieldAccess = Expression.PropertyOrField(parameter, fieldName);
// m.[fieldName]
var nullValue = Expression.Constant(null);
// null
var body = Expression.NotEqual(fieldAccess, nullValue);
// m.[fieldName] != null
var expr = Expression.Lambda<Func<T, bool>>(body, parameter);
// m => m.[fieldName] != null
return expr;
}
Run Code Online (Sandbox Code Playgroud)
然后使用它来创建表达式并将其插入:
var predicate = PredicateBuilder.True<MyType>();
foreach (var fieldName in fieldNames)
{
var expr = GenerateFieldNotNullExpression<MyType>(fieldName);
predicate = predicate.And(expr);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1183 次 |
| 最近记录: |