我有一个查询,看起来像这样:
var TheDataToDelete = (from x in MyDC.SomeTable
where x.....
select x).ToList();
if (TheDataToDelete.Count > 0)
{
MyDC.SomeTable.DeleteAllOnSubmit(TheDataToDelete);
MyDC.SubmitChanges();
}
大约有10K行删除,并在我的错误日志我有时(每周一次)看到此错误:
Inner Exception Type: System.ComponentModel.Win32Exception
Inner Exception: The wait operation timed out
Inner Source:
Exception Type: System.Data.SqlClient.SqlException
Exception: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
这有什么错我的代码和我需要什么改变来解决这个问题?
作为@Shyju建议,使用Any()
。还能去除ToList()
,因为这将已经执行查询。不加它将使查询有懒惰的执行。而由于那么只有做Any()
查询的效率会更高。
var TheDataToDelete = (from x in MyDC.SomeTable
where x.....
select x);
if (TheDataToDelete.AnY())
{
MyDC.SomeTable.DeleteAllOnSubmit(TheDataToDelete);
MyDC.SubmitChanges();
}
这将产生SQL查询;
SELECT
(CASE
WHEN EXISTS(
SELECT x
FROM MyDC.SomeTable
WHERE x
) THEN 1
ELSE 0
END) AS [value]
这是快速,高效。