【发布时间】:2013-11-29 13:53:56
【问题描述】:
执行此行时出现此错误,通过断点检测到此错误。
超时。在操作完成之前超时时间已过或服务器没有响应。
int? dressSerialNo;
var lstDress = (
from yy in currContext.OrderDressings
where yy.OrderID == this.OrderID
&& yy.OrderItemID == this.orderItemID
&& yy.ProductID == this.ProductID
select yy
).ToList();
if (lstDress.Count > 0)
{
dressSerialNo = (
from yy in lstDress
where yy.OrderID == this.OrderID
&& yy.OrderItemID == this.orderItemID
&& yy.ProductID == this.ProductID
select (int?)yy.SrNo
).Max();
dressSerialNo += dressSerialNo + 1;
}
else dressSerialNo = 1;
解决方案:- 在我的项目中,我在两个使用 ado.net 的模块旧方法和新开发的模块中对事务进行主线处理,我使用的是实体框架,因此它在事务中产生了问题。所以它变得异常了。
【问题讨论】:
-
始终使用
seq.Any()而不是seq.Count > 0。即使这里是一个列表,使用Any更易读,如果您删除ToList并改用seq.Count() > 0,效率也会更高。你想知道它是否包含任何元素,你不想知道总数。 -
删除
.ToList()看看会发生什么。 -
@TimSchmelter 对于访问
Count的列表很好 -
@TimSchmelter 这里
Count字段 -
启动 SQL 分析器,捕获查询,在 SSMS 中运行并分析查询计划。除了明显的“试试这个”猜谜游戏之外,我们真的无话可说。