2012-02-26 122 views
1

有没有人有最明智的想法这个错误意味着什么,以及如何解决它?我的所有研究都是空白的,我可以看到如何在MSDN上设置它,但是它并没有以一种向我解释问题是什么的方式来解释它。如果我删除了一些LINQ查询来设置viewbag项目,那么它似乎可以解决它,但是当我设置新的并将它们传递到我的视图中以生成MVCMailer的邮件时,它会回来。不知道它是一个viewbag问题还是仅仅是我调用了太多的linq查询来生成它们传递给视图。DbLimitExpression需要收集参数

我非常卡住(再次)..........

干杯, 史蒂夫。

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

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

的代码的一个例子是:

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

这是重复的各种参数,然后传递到视图中。

+0

哪个数据库引擎? – 2012-02-26 16:39:49

+0

Sql Server Compact 4.如果你认为这是与DBEngine相关的,我可以设置一个Azure DB并查看是否可以重复它?我认为这是代码相关的,所以没有尝试过。 – 2012-02-26 16:44:09

+0

它可能是,因为有一些驱动程序问题在一个点上,所以最好确保它不是与mysql相关的。这个代码是第一还是edmx? – 2012-02-26 17:23:41

回答

2

嗯,我遇到了类似的问题,并解决它。问题出在WHERE子句中:左侧等号运算符(=)的数据类型符号与右侧的数据类型不匹配。因此,在您的情况:

where A.SalutationId == policytransaction.SalutationId

A的SalutationID可能是policytransaction可能是一个字符串的INT和SalutationId(这是怎么在我的情况)。

我解决它通过分配policytransaction.SalutationId为int变量,并使用它:

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

也请注意,你不能直接浇铸直接Linq中的变量否则你会得到一个错误“LINQ到实体不识别该方法“。你将不得不使用一个临时变量,然后应用where子句。

+0

感谢DonNetFreak,我结束了重新编码,因为我认为这是我对数据库的调用次数,因此无法轻易测试。这听起来很明智,并会帮助其他人,因为我在网上找不到任何东西。所以标记为解决方案。 – 2012-06-10 19:43:30

0

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