gpt4 book ai didi

.net - LINQ 和 .COUNT 超时

转载 作者:行者123 更新时间:2023-12-01 08:42:30 25 4
gpt4 key购买 nike

我有一个一般性问题,并对 LINQ 和超时感到好奇。

我有一个正在运行的应用程序,我收到以下代码超时。

下面的代码,很正常,没看出有什么问题:

private static tblUser GetUserLinq(string email, string password) { DataContext db = new DataContext();

        var tblUsers = from user in db.tblUsers
where user.EmailAddress == email
&& user.Password == password
select user;

if (tblUsers.Count() == 0)
return null;

return tblUsers.First();
}

但是会出现以下超时,相当多:

        if (tblUsers.Count() == 0)

这里是异常(exception)

超时。在操作完成之前超时时间已过或服务器没有响应。 - System.Data.SqlClient.SqlException:超时已过期。在操作完成之前超时时间已过或服务器没有响应。 在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常, bool breakConnection) 在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常, bool breakConnection) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) 在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj) 在 System.Data.SqlClient.SqlDataReader.ConsumeMetaData() 在 System.Data.SqlClient.SqlDataReader.get_MetaData() 在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,字符串 resetOptionsString) 在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior, bool 返回流, bool 异步) 在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior, bool returnStream,String 方法,DbAsyncResult 结果) 在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior, bool returnStream,String 方法) 在 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为,字符串方法) 在 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior 行为) 在 System.Data.Common.DbCommand.ExecuteReader() 在 System.Data.Linq.SqlClient.SqlProvider.Execute(表达式查询,QueryInfo queryInfo,IObjectReaderFactory 工厂,Object[] parentArgs,Object[] userArgs,ICompiledSubQuery[] subQueries,Object lastResult) 在 System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(表达式查询,QueryInfo[] queryInfos,IObjectReaderFactory 工厂,Object[] userArguments,ICompiledSubQuery[] subQueries) 在 System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(表达式查询) 在 System.Data.Linq.DataQuery1.System.Linq.IQueryProvider.Execute[S](表达式表达式)
在 System.Linq.Queryable.Count[TSource](IQueryable
1 源) 在 C:\Actions.cs:line 104 中的 Actions.GetUserLinq(String email, String password) 在 C:\Actions.cs:line 33 中的登录(字符串电子邮件,字符串密码)处

我对为什么超时的一些想法:

count需要统计那个表的记录数,这不是我们要的如果我们试图查找记录是否存在,那么我们应该使用以下代码:

        var tblUsers = (from user in db.tblUsers
where user.EmailAddress == email
&& user.Password == password
select user).FirstOrDefault(u => u.UserId <0) ;

否则我有点困惑为什么 LINQ 会超时

我注意到的另一件事是,如果您通过 SQL 企业管理器直接在机器上运行以下 SQL,它也会超时,这表明它可能是一个锁定问题,但是调用该表的唯一应用程序是 LINQ

从 tbluser 中选择计数(用户 ID)

欢迎评论

最佳答案

您应该检查用户表的索引。用户名/密码索引可能会有所帮助。

关于.net - LINQ 和 .COUNT 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/720428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com