我正在使用linq Expression生成查询,但是我卡在要添加null或空检查的地方。 这是代码:
var constant = Expression.Constant(null, typeof(object));
var comparison = Expression.Equal(field, constant);
var lambda = Expression.Lambda<Func<MyModel, bool>>(comparison, parameter);
现在,我想同时检查null和empty。我该怎么办?
答案 0 :(得分:1)
您可以使用String.IsNullOrEmpty
或生成OrElse
表达式。如有疑问,请使用C#编写代码,然后查看编译器生成的表达式树。例如
Expression<Func<string, bool>> expr = (str => str == null || str.Length == 0);
然后,在调试器中对其进行检查。
答案 1 :(得分:1)
我在您的previous question中的回答。
var parameter = Expression.Parameter(typeof(MyModel), "x");
var body = Expression.PropertyOrField(parameter, nameof(MyModel.Property1));
var methodCall = Expression.Call(typeof(string), nameof(string.IsNullOrWhiteSpace), null, body);
var nullOrWhiteSpaceComparison = Expression.Not(methodCall);
var lambda = Expression.Lambda<Func<MyModel, bool>>(nullOrWhiteSpaceComparison, parameter);
用作:
query.Where(lambda);