如何检查Exression.Constant中的空字符串和空字符串?

时间:2018-10-09 11:10:47

标签: c# entity-framework linq .net-core

我正在使用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。我该怎么办?

2 个答案:

答案 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);