Изменение
var uAccounts = (from u in base.context.Users
select u.Accounts.Select(s => s.AccountNumber)).ToList();
до
var uAccounts = base.context.Users.SelectMany(u =>
u.Accounts.Select(s => s.AccountNumber)).ToList();
И чтобы фактически ответить на ваш вопрос, разница между двумя строками вашего кода заключается в том, что первая проходит через каждую учетную запись и выбирает только номер учетной записи. Второе утверждение выбирает встроенный запрос Linq IEnumerable<string>
. Таким образом, вы конвертируете в List<T>
из этих IEnumerable<string>
Это фактически показывает преимущество метода расширения SelectMany (на самом деле я не уверен, как использовать это в операторе запроса). Вместо этого метод SelectMany выравнивает IEnumerable<T>
, который вы обычно получаете, к одному перечислению элемента T
. Поэтому, когда вызывается ToList()
, он вернет вам List<string>
вместо перечисляемого.