I'm having trouble understanding why the SQL output has a sub-query for a simple query I wrote in LINQ. This is my code:
var list = db.User.Where(u => u.Name == somename).OrderBy(u => u.IdUser).ToList();
where somename is a parameter I'm passing at execution time.
The output SQL is:
SELECT
Project1.IdUser,
Project1.Name
FROM (SELECT
Extent1.IdUser,
Extent1.Name
FROM user AS Extent1
WHERE Extent1.Name = 'John' /* @p__linq__0 */) AS Project1
ORDER BY
Project1.IdUser ASC
Should the output really have a sub-query for something that simple?
I also tried
var list = db.User.Where(u => u.Name.Equals(somename)).OrderBy(u => u.IdUser).ToList();
which generates the same output as above.
If I hard code the parameter, like:
var list = db.User.Where(u => u.Name == "John").OrderBy(u => u.IdUser).ToList();
It works as expected, generating only
SELECT
Extent1.IdUser,
Extent1.Name
FROM user AS Extent1
WHERE 'John' /* @gp1 */ = Extent1.Name
ORDER BY
Extent1.IdUser ASC
A few things I'm using:
- EntityFramework 5, .NET 4.5
- SQL Server 2012
- Glimpse (which uses MiniProfiler) to see the SQL generated
I'm not a LINQ expert, so what am I missing here?