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

时间:2012-12-03 22:37:41

标签: c# sql-server linq-to-sql

我有以下Linq to SQL查询。

var users = rdc.Users.Where(u => u.EmailAddress.Equals(emailaddress) && password.Equals(hash));

但它总是转换为:

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

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

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

1 个答案:

答案 0 :(得分:6)

此行上方是否定义了hashpassword?看起来您可能忘记在查询中添加u.。如果已定义password,则您不会看到错误,但它永远不会等于hash

你的意思是写:

var users = rdc.Users.Where(u => u.EmailAddress == emailaddress && u.Password == hash);
                                                                   ^^^

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