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