LINQ: Как получить объекты из внутреннего списка в один список?

Сам объект DateTime является неизменным, но не является эталонным dt . ДТ разрешено изменять, на какой объект DateTime он указывает. Неизменяемость относится к тому факту, что мы не можем изменять переменные внутри объекта DateTime.

Например, мы не можем перейти

dt.Day = 3;

dt сама по себе является просто ссылочной переменной, которая указывает на объект DateTime. По определению допускается варьировать .

Как упоминалось в pst , только для чтения и const , вероятно, ближе к тому, что вы думаете, где вы не можете изменить значение переменная.


Примечание: DateTime является структурой , и, следовательно, имеет тип значения , и меня вводят в заблуждение, вызывая dt ссылка.' Тем не менее, я думаю, что все еще верно, что dt по-прежнему является просто переменной, «указывающей» на неизменяемый объект, а сама переменная все еще является изменчивой. Спасибо dan04 за указание на это.

37
задан Stécy 22 June 2009 в 17:56
поделиться

2 ответа

Ответ Скотта великолепен; Я просто хотел бы отметить, что вы действительно можете выполнить этот запрос, используя синтаксис продолжения запроса :

from parent in parents 
where parent.Children.Any (c => c.CategoryNumber==1)
select parent into p
from child in p.Children
where child.CategoryNumber == 2
select child

Обратите внимание, как «в» позволяет передать результат одного запроса в следующий запрос . Красиво, а?

44
ответ дан 27 November 2019 в 04:20
поделиться

Вы можете связать пару запросов вместе, используя SelectMany и Где ].

var selectedChildren = (from p in parents
                       where p.Children.Any (c => c.CategoryNumber==1)
                       select p)
                       .SelectMany(p => p.Children)
                       .Where(c => c.CategoryNumber == 2);

// or...

var selectedChildren = parents
                         .Where(p => p.Children.Any(c => c.CategoryNumber == 1))
                         .SelectMany(p => p.Children)
                         .Where(c => c.CategoryNumber == 2);
50
ответ дан 27 November 2019 в 04:20
поделиться
Другие вопросы по тегам:

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