Как сказал Даниил, это сделано намеренно. См. Каковы преимущества отложенного выполнения в LINQ? для расширенного обсуждения, но по существу данные загружаются при его использовании, а не при его запросе. Единственный способ увидеть, что он пуст, - это отладчик;ваш исполняемый код не видит его таким образом, потому что как только вы попытаетесь выяснить, пуста ли первая форма или нет, она заполнится данными, и в этот момент (точка использования) не имеет значения, что она былапусто до этого момента - ничто не использовало его, чтобы выяснить, было ли оно пустым или полным
Думайте об этом немного как кошка Шрондингера
Это довольно полезно на самом деле:
var w = worldPopulation.Where(e => e.Gender = Gender.Male)
if(name!=null)
w=w.Where(e=>e.Name == name)
Первый запрос, если он был выполнен немедленно, мог видеть 3,5 миллиарда результатов, загруженных из вашей базы данных на ваш клиент (машина с низкой спецификацией по сравнению с сервером), тогда фильтр имен уменьшил бы его до нескольких миллионов. Во-первых, лучше всего загрузить несколько миллионов в вашу медленную машину с низкой спецификацией по очень медленной сети .. верно?
Одно из преимуществ выполнения запроса только тогда, когда вы фактически запрашиваете данные, состоит в том, чтов этот момент вы наконец знаете, что хотите получить данные. До этого момента он мог вам никогда не понадобиться, поэтому его загрузка была бы пустой тратой ресурсов