DbLimitExpression требует аргумент коллекции - PullRequest
1 голос
/ 26 февраля 2012

Кто-нибудь имеет хоть малейшее представление о том, что означает эта ошибка, пожалуйста, и как ее устранить?Все мои исследования рисуют пустые места, я вижу, как установить его на MSDN, но он не объясняет это таким образом, который объясняет мне, в чем проблема.Если я удаляю некоторые из своих запросов LINQ для установки элементов viewbag, то, похоже, это разрешает их, но в тот момент, когда я устанавливаю новые и передаю их в свое представление для генерации почты для MVCMailer, он возвращается.Не уверен, что это проблема с viewbag или просто я вызываю слишком много запросов linq, чтобы сгенерировать их для передачи в представление.

Я очень застрял (снова) ..........

Cheers, Steve.

DbLimitExpression требует аргумента коллекции.Имя параметра: аргумент Описание: необработанное исключение произошло во время выполнения текущего веб-запроса.Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.ArgumentException: DbLimitExpression требует аргумент коллекции.Имя параметра: аргумент

Пример кода:

            var VBSalutation = from A in context.Salutations
                where A.SalutationId == policytransaction.SalutationId
                select A.SalutationName;
        ViewBag.Salutation = VBSalutation.FirstOrDefault();

Это повторяется для различных параметров и затем передается в представление.

Ответы [ 2 ]

2 голосов
/ 09 июня 2012

Ну, я столкнулся с подобной проблемой и решил ее. Проблема была в предложении WHERE: тип данных знака оператора равенства (=) на левой стороне не совпадает с типом данных на правой стороне. Итак, по вашему сценарию:

where A.SalutationId == policytransaction.SalutationId

SalutationID из A может быть INT, а SalutationId из policytransaction может быть строкой (так было в моем случае).

Я решил это, присвоив policytransaction.SalutationId переменной Int и используя его:

int myIntVariable = Convert.ToInt16(policytransaction.SalutationId);
...//some code here
where A.SalutationId == myIntVariable;

Обратите также внимание, что вы не можете напрямую приводить переменные непосредственно в Linq, иначе вы получите сообщение об ошибке «LINQ to Entities не распознает метод». Вам нужно будет использовать временную переменную, а затем применить предложение where.

0 голосов
/ 28 февраля 2012

Попробуйте ViewBag.Salutation = VBSalutation.SingleOrDefault();

...