Использование Enumerable.Cast
:
return query.Cast<ICompany>().ToList();
Несколько комментариев:
List<Company> companies = new List<Company>();
Это создает новый список. Но вы никогда не используете его, потому что через две строки вы получите
companies = query.ToList();
перезаписывает созданный вами список (а в промежуточной строке вы никогда не обращаетесь к companies
). Если вы хотите, вы можете объявить и получить результаты одним махом:
List<Company> companies = query.ToList();
Во-вторых, все это не нужно, если вы просто пытаетесь вернуть список результатов. Краткость (в определенной степени) - большой плюс в программировании. «Меньше значит больше» - это выражение, так как меньше кода означает меньше кода для написания, меньше кода для тестирования и меньше кода для обслуживания. Мгновенное повышение производительности за счет написания меньшего количества кода! Вот краткая версия вашего метода:
public List<ICompany> FindAll() {
var query = from c in _scope.Extent<Company>()
select c;
return query.Cast<ICompany>().ToList();
}
или даже
public List<ICompany> FindAll() {
return _scope.Extent<Company>().Cast<ICompany>().ToList();
}
В-третьих, как минимум, вы должны рассмотреть возможность возврата IList
вместо List
. Лучше кодировать интерфейсы, а не конкретные типы. Это отделяет ваш код от деталей реализации, делая код более удобным для изменения и более легким для тестирования.
Наконец, вы должны проверить, действительно ли вам нужно вернуть List
. Какие методы в списке вы используете? Если вы просто используете его для перечисления результатов (foreach(var item in list)
), вам следует вместо этого вернуть IEnumerable<ICompany>
:
public IEnumerable<ICompany> FindAll() {
return _scope.Extent<Company>().Cast<ICompany>();
}