【问题标题】:How to check for null and empty string in Exression.Constant?如何在 Exression.Constant 中检查 null 和空字符串?
【发布时间】:2018-10-09 11:10:47
【问题描述】:

我正在使用 linq 表达式来生成查询,但我被困在想要添加空或空检查的地方。 代码如下:

var constant = Expression.Constant(null, typeof(object));
var comparison = Expression.Equal(field, constant);
var lambda = Expression.Lambda<Func<MyModel, bool>>(comparison, parameter);

现在我想在常量中检查 null 和 empty。我该怎么做?

【问题讨论】:

  • string.isNullOrEmpty?
  • 我认为我不能在 Expression.Constant 中使用 string.IsNullOrEmpty

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


【解决方案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);

【讨论】:

    【解决方案2】:

    您可以使用String.IsNullOrEmpty 或生成OrElse 表达式。如果有疑问,请用 C# 编写代码并查看编译器生成的表达式树。例如

    Expression<Func<string, bool>> expr = (str => str == null || str.Length == 0);
    

    然后,在调试器中检查它。

    【讨论】:

    • 那我该如何在lamda中使用这个表达式呢?
    猜你喜欢
    • 2019-03-20
    • 2018-09-29
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    相关资源
    最近更新 更多