Я не знаю, является ли это лучшей практикой, но я написал похожий код в не совсем недавнем прошлом, потому что я тоже чувствовал, что могу улучшить разделение задач, используя свои собственные классы вместо сгенерированных LINQ-дизайнером в моем приложении.
Возможно, вы захотите просто вернуть IQueryable вместо IList из вашего метода доступа к данным. Так как IQueryable наследует от IEnumerable , остальная часть вашего приложения должна быть в состоянии справиться с этим довольно хорошо. Вы также можете преобразовать его в список, когда вам это действительно нужно.
Преимущество этого состоит в том, что вы можете довольно легко динамически изменять запрос и минимизировать объем данных, возвращаемых с SQL Server.
например. если подпись вашего метода
IQueryable GetCustomers () вы можете получить одного клиента, вызвав GetCustomers (). Где (c => c.CustomerID == 101) .Single ();
В этом примере из базы данных будет возвращена только одна запись, в то время как я полагаю, что в настоящее время ваш код будет возвращать либо всех клиентов, либо вам потребуется написать отдельные методы (и, следовательно, очень повторяющийся код) для обслуживания всех различных вещей Вы можете фильтровать по.