Linq to Sql попытается сгенерировать sql-запрос для представления всего выражения. Это означает, что он попытается передать коллекцию пользователей объявлений в качестве параметров в запросе sql. Если пользователей слишком много, запрос достигнет предела параметра (2100) и не может быть выполнен. Если в команде не так много пользователей, вы можете использовать выражение содержимого, которое будет преобразовано в выражение «IN» в sql.
Вот что предложил Стивен:
string[] usernames = adUsers.Select(u => u.fullname).ToArray();
var teamsheets =
from t in timesheets
where usernames.Contains(t.User1.username)
select t;
Единственный способ использовать объединение в том виде, в котором вы пытались, - это извлечь все временные таблицы из базы данных в память (используя ToList для временных таблиц var), и тогда соединение произойдет в памяти. Если это работает лучше, чем использование Contains, или вы не можете использовать Contains из-за размеров команды, возможно, стоит подумать.