При использовании LINQ, каково различие между && и несколькими где пункты?

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

  • Каждый сделал это в файле конфигурации (не мой фаворит)
  • , Каждый сделал это с помощью базы данных - это работало вполне прилично, но было болью в Вас, знают, что поддержать.
  • используемый файл ресурсов путем Вы предлагаете, и я должен сказать, что это был мой любимый подход.
  • самый основной сделал это с помощью включать файла, полного строк - ужасный.

я сказал бы метод ресурса, который Вы выбрали имеет много смысла. Было бы интересно видеть ответы других людей также, как я часто задаюсь вопросом, существует ли лучший способ сделать вещи как это. Я видел многочисленные ресурсы что вся точка к методу ресурсов использования, включая один прямо здесь на ТАК .

16
задан Tamir Vered 22 December 2016 в 12:50
поделиться

6 ответов

Первый будет переведен в:

objectList.Where(o => o.value1 < 100).Where(o=> o.value2 > 10)

, а второй будет переведен в:

objectList.Where(o => o.value1 < 100 && o.value2 > 10)

Итак, в первом у вас будет первая отфильтрованная последовательность, которая отфильтрована снова (первая последовательность содержит все объекты со значением <100, вторая содержит все объекты со значением> 10 из первой последовательности), в то время как во второй вы выполните те же сравнения в том же выражении labda. Это справедливо для Linq для объектов, для других провайдеров это зависит от того, как переводится выражение.

19
ответ дан 30 November 2019 в 16:30
поделиться

Я только что его профилировал. Нет разницы в коде SQL

3
ответ дан 30 November 2019 в 16:30
поделиться

Как насчет ответа: с && вы не можете гарантировать, что оба выражения будут вычислены (если первое условие ложно, второе может не быть вычислено). С двумя предложениями where вы можете. Не знаю, правда ли это, но мне это нравится!

0
ответ дан 30 November 2019 в 16:30
поделиться

При прочих равных, я бы выбрал версию condition1 && condition2 для удобства чтения кода.

0
ответ дан 30 November 2019 в 16:30
поделиться

Первый переводится как:

objectList.Where(o => o.value1 < 100)
          .Where(o => o.value2 > 10);

, а второй дает вам:

objectList.Where(o => o.value1 < 100 && o.value2 > 10);       

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

То есть, если вы используете linq to objects. Если вы используете поставщика, это зависит от того, как он реализован (если предикат не учитывается в результирующем запросе, результат может быть неоптимальным).

6
ответ дан 30 November 2019 в 16:30
поделиться

На самом базовом уровне вы получаете две операции Where вместо одной. Использование Reflector - лучший способ проверить, что получается на другом конце выражения запроса.

Будут ли они оптимизированы до одного и того же, зависит от фактического поставщика LINQ - он должен взять все дерево и преобразовать его в другое синтаксис. Для LINQ To Objects это не так.

Подробный анализ C # поможет вам разобраться в этой теме.

1
ответ дан 30 November 2019 в 16:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: