Я видел, что проекты реализовали использование многих разных подходов, у каждого есть их достоинства и недостатки.
я сказал бы метод ресурса, который Вы выбрали имеет много смысла. Было бы интересно видеть ответы других людей также, как я часто задаюсь вопросом, существует ли лучший способ сделать вещи как это. Я видел многочисленные ресурсы что вся точка к методу ресурсов использования, включая один прямо здесь на ТАК .
Первый будет переведен в:
objectList.Where(o => o.value1 < 100).Where(o=> o.value2 > 10)
, а второй будет переведен в:
objectList.Where(o => o.value1 < 100 && o.value2 > 10)
Итак, в первом у вас будет первая отфильтрованная последовательность, которая отфильтрована снова (первая последовательность содержит все объекты со значением <100, вторая содержит все объекты со значением> 10 из первой последовательности), в то время как во второй вы выполните те же сравнения в том же выражении labda. Это справедливо для Linq для объектов, для других провайдеров это зависит от того, как переводится выражение.
Я только что его профилировал. Нет разницы в коде SQL
Как насчет ответа: с && вы не можете гарантировать, что оба выражения будут вычислены (если первое условие ложно, второе может не быть вычислено). С двумя предложениями where вы можете. Не знаю, правда ли это, но мне это нравится!
При прочих равных, я бы выбрал версию condition1 && condition2
для удобства чтения кода.
Первый переводится как:
objectList.Where(o => o.value1 < 100)
.Where(o => o.value2 > 10);
, а второй дает вам:
objectList.Where(o => o.value1 < 100 && o.value2 > 10);
Функционально то же самое, и хотя второй избавит от вызова метода, разница в производительности незначительна. . Используйте то, что вам удобнее.
То есть, если вы используете linq to objects. Если вы используете поставщика, это зависит от того, как он реализован (если предикат не учитывается в результирующем запросе, результат может быть неоптимальным).
На самом базовом уровне вы получаете две операции Where вместо одной. Использование Reflector - лучший способ проверить, что получается на другом конце выражения запроса.
Будут ли они оптимизированы до одного и того же, зависит от фактического поставщика LINQ - он должен взять все дерево и преобразовать его в другое синтаксис. Для LINQ To Objects это не так.
Подробный анализ C # поможет вам разобраться в этой теме.