Linq To SQL select语句转换为Where 0 = 1

Jer*_*oyd 3 c# sql-server linq-to-sql

我有以下Linq to SQL查询.

var users = rdc.Users.Where(u => u.EmailAddress.Equals(emailaddress) && password.Equals(hash));
Run Code Online (Sandbox Code Playgroud)

但它总是转化为:

SELECT [t0].[Id], [t0].[Guid], [t0].[RoleId], [t0].[EmailAddress], [t0].[Password], [t0].[FirstName], [t0].[LastName], [t0].[Created], [t0].[Activated], [t0].[LastAction]
FROM [dbo].[Users] AS [t0]
WHERE 0 = 1
Run Code Online (Sandbox Code Playgroud)

我只是将表重新导入到我的DBML文件中以确保反映最新的模式,但它仍然删除了我的子句并添加 WHERE 0 = 1

我可以使用,ExecuteQuery<T>(string, params[])但我想找到这个的根本原因.

Chr*_*ris 6

hashpassword这条线以上定义的?看起来您可能忘记u.在查询中添加.如果password已经定义,那么你不会看到错误,但它永远不会相等hash.

你的意思是写:

var users = rdc.Users.Where(u => u.EmailAddress == emailaddress && u.Password == hash);
                                                                   ^^^
Run Code Online (Sandbox Code Playgroud)

此外,@ Mark指出使用==运算符将显示.Equals运算符可能忽略的错误.