0

在我的 MVC 项目中,我使用的是 EF,其中实体(edmx)是通过使用 Rocket U2 从 Universe DB 生成的。在 edmx 生成之后,我只是觉得这将是使用 LINQ 进行数据检索的直接业务,但这并不是因为我用我非常简单的第一个 LINQ 语句立即偶然发现了一个问题,如下所示

1. var test1 = userRepo.QueryAll().Where(x => x.Code == model.UserName);
// generated SQL
FROM User AS Extent1
WHERE (Extent1.Code = ?) OR ((Extent1.Code IS NULL) AND (? IS NULL))}

是不是很简单?实际上,到目前为止,当我将属性值传递给 where 子句时,LINQ 生成的 SQL 语句并不像我所经历的那样很奇怪,而下面的语句在我有硬编码值的地方执行完全正常

2. var test1 = userRepo.QueryAll().Where(x => x.Code == "JK");
// generated SQL
FROM User AS Extent1
WHERE 'JK' = Extent1.Code}

现在,如果我返回到我的第一个 LINQ 查询,我注意到,如果我在 where 子句之前枚举结果,它将起作用,即。如下

3. var test = userRepo.QueryAll().ToList().Where(x => x.Code == model.UserName);

可以请任何人解释我在这里做错了什么。虽然,我可以在应用过滤器之前枚举结果,但这不适合以后的开发,我必须使用连接等。

即使直接使用 DbContext 而不是单独的存储库,上述行为也是相同的。

4

0 回答 0