DbLimitExpression需要一个集合参数

时间:2012-02-26 15:55:40

标签: linq asp.net-mvc-3 viewbag

有没有人最清楚这个错误意味着什么以及如何解决它?我的所有研究都是空白,我可以看到如何在MSDN上设置它,但它没有以一种向我解释问题的方式来解释它。如果我删除了一些我的LINQ查询以设置viewbag项目,那么它似乎解决了它,但是当我设置新的并将它们传递到我的视图中以生成MVCMailer的邮件时,它又回来了。不确定它是否是一个viewbag问题,或者仅仅是我调用了太多的linq查询来生成它们以传递给视图。

我很困难(再次)..........

干杯, 史蒂夫。

DbLimitExpression需要一个集合参数。 参数名称:参数 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。

异常详细信息:System.ArgumentException:DbLimitExpression需要一个集合参数。 参数名称:参数

代码的一个例子是:

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

对各种参数重复此操作,然后传递给视图。

2 个答案:

答案 0 :(得分:2)

嗯,我遇到了类似的问题并解决了它。问题出现在WHERE子句中:左侧等于运算符(=)符号的数据类型与右侧的数据类型不匹配。所以在你的场景中:

where A.SalutationId == policytransaction.SalutationId

A的SalutationID可能是INT,策略事务的SalutationId可能是一个字符串(这就是我的情况)。

我通过将policytransaction.SalutationId分配给Int变量并使用它来解决它:

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

请注意,您无法直接在Linq中直接转换变量,否则您将收到错误“LINQ to Entities无法识别该方法”。您必须使用临时变量,然后应用where子句。

答案 1 :(得分:0)

尝试ViewBag.Salutation = VBSalutation.SingleOrDefault();