Linq查询生成超时

fre*_*hie 0 c# linq linq-to-sql

我有一个看起来像这样的查询:

var TheDataToDelete = (from x in MyDC.SomeTable
                       where x.....
                       select x).ToList();

if (TheDataToDelete.Count > 0)
{
  MyDC.SomeTable.DeleteAllOnSubmit(TheDataToDelete);
  MyDC.SubmitChanges();
}
Run Code Online (Sandbox Code Playgroud)

有大约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.
Run Code Online (Sandbox Code Playgroud)

我的代码有什么问题,我需要修改什么来修复它?

Kol*_*lky 6

正如@Shyju建议的那样,使用Any().但也删除,ToList()因为它已经执行查询.不添加它将使查询具有延迟执行.因为那时只做Any()查询会更有效率.

var TheDataToDelete = (from x in MyDC.SomeTable
                       where x.....
                       select x);

if (TheDataToDelete.AnY())
{
    MyDC.SomeTable.DeleteAllOnSubmit(TheDataToDelete);
    MyDC.SubmitChanges();
}
Run Code Online (Sandbox Code Playgroud)

哪个会产生SQL查询;

SELECT
    (CASE
        WHEN EXISTS(
            SELECT x 
            FROM MyDC.SomeTable
            WHERE x
            ) THEN 1
        ELSE 0
     END) AS [value]
Run Code Online (Sandbox Code Playgroud)

这是快速和有效的.