1) yield
не обязательно будет быстрее получать все значения, но это позволит коду начать обработку результатов до того, как база данных вернет все результаты. То есть, доход возвращает первый результат в момент его появления, а ToArray () должен ждать появления всех результатов перед возвратом. Конечно, если базовые поставщики сразу возвращают все результаты из-за буферизации или по другим причинам, это может не повлиять.
2) Да, using
будет избавляться от LinqDataContext независимо от того, как вы выходите блок использования (исключения / return / break /...)