itsathere Ответов: 4

Терниарный оператор в linq


Мне нужен тернарный оператор в предложении where linq.

Что я уже пробовал:

filteredItem = ItemList.Where(x =>; (Model != "" ? (x.ModelNumber.ToLower().Contains(Model.ToLower())) : x.ModelNumber)

Kornfeld Eliyahu Peter

А что плохого в том, что у тебя есть?

Sascha Lefèvre

Пожалуйста, объясните свое намерение - чего вы хотите достичь здесь?

Philippe Mori

Таким образом, ваш код даже не будет компилироваться. Символ ; после стрелки => не имеет никакого смысла.

И между прочим, ты даже не говоришь ни о проблеме, ни о том, что хочешь сделать. Таким образом, вы не заслуживаете много очков, так как не прилагаете много усилий, чтобы написать адекватный вопрос.

divya behera

пожалуйста, укажите ваши требования

4 Ответов

Рейтинг:
35

phil.o

В тернарном операторе оба элемента в каждой стороне : должен возвращать тот же тип.
Что, по-видимому, не так в вашем коде, где левая часть возвращает логическое значение (содержит метод), в то время как правая часть, кажется, возвращает строку (ModelNumber).

Пожалуйста, смотрите ?: Оператор (Ссылка На C# )[^].
Особенно этот абзац:

Either the type of first_expression and second_expression must be the same, or an implicit conversion must exist from one type to the other.


Надеюсь, это поможет.


Angelo L

Это правильно, вдвойне, так как оператор where требует, чтобы лямбда возвращала логическое значение.

Рейтинг:
22

Dave Kreskowiak

В этом нет никакого смысла.

Код, который вы опубликовали, делает это:

if Model does not equal ""
    // This will return a boolean value.
    return (x.ModelNumber.ToLower().Contains(Model.ToLower())
else
    // This will return whatever ModelNumber is.
    return x.ModelNumber

Я очень сомневаюсь, что ваш ModelNumber является логическим, поэтому ваши два типа возвращаемых значений различны. В троичной операции это верный путь к катастрофе.


Sascha Lefèvre

Компилятор не позволит этого в первую очередь.

Dave Kreskowiak

Я знаю. Я просто оставил все как есть, потому что ОП на самом деле не описал проблему или то, что он хочет, достаточно подробно.

Рейтинг:
1

Member 12093845

выход ВАР=списке "мой список".Метода firstordefault(х => У Х. ModelNumber != значение null ? х.ModelNumber.Нижестоящим().Содержит(Модель.Нижестоящим()) : х.ModelNumber))


Рейтинг:
0

Mirza Merdovic

Из вашего кода я предполагаю, что вы пытаетесь фильтровать и изменять свой код одновременно, что обычно невозможно сделать из коробки.

Если я правильно понял ваш фрагмент кода, Вы хотите вернуть свойство "ModelNumber", если" Model " не пуст и в нем содержится текущий итерационный элемент.

Вот возможное решение:

var filteredItems =
                string.IsNullOrWhiteSpace(Model)
                    ? ItemList
                    : ItemList.Where(x => x.ModelNumber.ToLowerInvariant().Contains(Model.ToLowerInvariant())).ToList();


Надеюсь, это поможет, удачи и в следующий раз, пожалуйста, постарайтесь быть более конкретным или покажите нам больше кода.

Ура!