无法为数组中的空值创建条件?

时间:2019-05-19 18:42:39

标签: entity-framework linq expression expression-trees linq-expressions

我正在使用linq表达式树来构建查询。

我的数组:

string[] { null, null }

我要实现的条件:

x == null ? null : x.ToLower()

我的linq表达式如下:

{Param_0 => value(System.String[]).Any(Param_1 => (Param_0.FirstName.ToLower() == IIF((Param_1 == null), null, Param_1.ToLower())))}

这是我的第一次尝试,我似乎找不到正确的方法

Constant = Expression.Condition(Expression.Equal(Constant, Expression.Constant(null, typeof(string))), Expression.Constant(null, typeof(string)), Expression.Call(Constant, "ToLower", null));

预期结果是能够对不为null的元素调用.ToLower()

1 个答案:

答案 0 :(得分:0)

在我看来,您想要一个表示函数调用的表达式,并输入一个字符串,然后输出一个字符串。

Expression<Func<string, string>>

Lambda表达式如何?

Expression<Func<string, string>> myExpression = (x) => (x==null) ? null : x.ToLower();

此表达式可在Queryable Select语句中使用,如下所示:

IQueryable<string> myItems = new List<sring>()
{
    "Abc",
    null,
    "DEF",
    null,
    "gHI",
}
.AsQueryable();

IQueryable<string> myLowerCaseItems = myItems.Select(myExpression);
foreach (string item in myLowerCaseItems)
{
    if (item == null)
        Console.WriteLine("<null>");
    else
        Console.WriteLine(item);
}

这将产生以下输出:

abc        定义        吉