Отфильтровать результаты с помощью логического свойства или по идентификатору в запросе linq

У меня есть класс под названием Level с идентификатором (Int32) и свойством IsActive (bool).

В моем запросе linq я хочу отфильтровать определенный уровень с идентификатором 14672. Этот уровень также имеет свойство IsActive, установленное на «False».

Я знаю, что использование свойства IsActive отфильтрует все неактивные уровни ... и это нормально.

С точки зрения производительности и логически, было бы лучше отфильтровать результаты с помощью «IsActive» или просто использовать «! =», Как показано ниже:

        var gameObjectives = region.Characters
            .Select(e => e.Character)
            .Where(e => e.Level.IsActive && e.Level.Equipment == Equipment.ARQ);

или

        var gameObjectives = region.Characters
            .Select(e => e.Character)
            .Where(e => e.Level.Id != 14672 && e.Level.Equipment == Equipment.ARQ);

Они оба в значительной степени функционально идентичны. Linq создает цикл каждый раз, поэтому вы говорите о яблоках и апельсинах. Один - это сравнение с bool, а другой - сравнение неравенства с идентификатором. Практически те же ресурсы процессора.

Goodbye StackExchange 13.09.2018 19:52

Если вы работаете с опцией x86, целое число составляет 16 бит, поэтому было бы лучше с bool. В противном случае это, вероятно, не имеет значения.

jdweng 13.09.2018 19:54

Если ваше намерение / требование - «отфильтровать определенный уровень с идентификатором 14672», то я думаю, что использование e.Level.Id! = 14672 лучше проясняет намерение. Использование IsActive может дать тот же результат сейчас, но позже, когда какой-либо другой уровень будет деактивирован, ваш результат может быть неверным.

anish 13.09.2018 20:02
0
3
56
0

Другие вопросы по теме