Да, вы правы, полагая, что ваш IQueryable может выдать ошибку во время выполнения, если часть выражения не может быть переведена в SQL.Из-за этого я думаю, что было бы неплохо иметь ваши запросы в классе бизнес-уровня (например, в службе данных или хранилище), а затем убедиться, что этот запрос покрыт автоматическим тестом.в неожиданное время основное правило, которое нужно иметь в виду, это то, что ваше выражение будет оцениваться всякий раз, когда вы вызываете foreach для него.Это также включает методы, которые вызывают foreach за кулисами, например ToList()
и FirstOrDefault()
.
Кстати, простой способ определить, будет ли метод вызывать foreach и заставлять вашу лямбду вычислять, - это проверить, является ли возвращаемое значение этого метода IQueryable.Если возвращаемое значение является другим IQueryable, то метод, вероятно, просто добавляет к выражению, но не заставляет его оценивать.Если возвращаемое значение является List<T>
, анонимным типом или чем-то, что выглядит как данные вместо IQueryable, тогда метод должен был заставить ваше выражение выполнить оценку для получения этих данных.