Where子句不接受参数化值但接受linq中的硬编码值

时间:2016-10-27 12:43:14

标签: c# entity-framework linq linq-to-entities uniobjects

在我的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子句i-e之前枚举结果,它将起作用。如下

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

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

即使直接使用DbContext而不是单个存储库,上述行为也是一样的。

0 个答案:

没有答案