Вызов datacontext.Things
вернет IQueryable<Thing>
. Но в моем случае активный пользователь может не иметь прав на просмотр каких-либо вещей . В этом случае я хотел бы вернуть пустой IQueryable вещей из моего хранилища. До сих пор я использовал
return new Enumerable.Empty<Thing>.AsQueryable();
чтобы это сделать, и это сработало нормально.
Мы сделали некоторые разработки, и теперь, позже, Queryable объединяется с другим IQueryable. Выполнение этого вызывает следующее исключение:
An IQueryable that returns a self-referencing Constant expression is not supported.
Это происходит потому, что linq не может присоединиться к реальному IQueryable с чем-то, что действует как IQueryable, но на самом деле является Enumerable.
Я посмотрел на SO, чтобы найти решение этой проблемы, и единственной альтернативой, которую я нашел, было использование
return datacontext.Things.Take(0);
Несмотря на то, что это устраняет вышеуказанную проблему, поскольку он возвращает фактический IQueryable, я предполагаю, что он также фактически выполняет вызов базы данных, что кажется ненужным отрезком времени, так как я заранее знаю, что вызов не собирается возвращать какие-либо записи. Или linq2Sql достаточно умен, чтобы фактически не выполнять этот запрос?
Есть ли способ создать пустой IQueryable, который все еще можно использовать в соединении, не обращаясь к базе данных?