Не можете создать условие для нулевых значений в массиве? - PullRequest
0 голосов
/ 19 мая 2019

Я использую деревья выражений 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));

Ожидаемый результат - возможность вызова.ToLower() для элементов, которые не равны нулю

1 Ответ

1 голос
/ 19 мая 2019

Мне кажется, что вам нужно выражение, представляющее вызов функции с вводом строки и выводом строки.

Expression<Func<string, string>>

Как насчет лямбда-выражения?

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);
}

Это дает следующий вывод:

а Защита ГХИ

...