-
Notifications
You must be signed in to change notification settings - Fork 3.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
to put Take() in the different place will get different SQL #12453
Comments
This is by design, Take operator forces us to produce a subquery, which complicates the overall query. You should still get correct results for both queries, difference is that in first case the second projection is performed on the client. In general you will get better queries if operators like Skip/Take/Distinct are used as late as possible |
@maumar maybe I am missing something but it seems reasonable to expect Take to be lifted here. I get that we don't do it, and that maybe this scenario alone doesn't justify changing that, but is there any fundamental reason we can't? |
Reopening this so we can discuss it in triage. |
We can optimize this (i.e. move Take() further if there are no filters in the query after the place where Take was originally. This can be optimized: var aa = db.Customers.Select(e => new Customer
{
FirstName = e.FirstName,
LastName = e.LastName,
UserName = e.UserName
})
.Where(e => e.UserName != "Foo")
.Take(1)
.Select(e => new CusomterDto { FullName = e.FirstName + " " + e.LastName }); This can't be optimized: var aa = db.Customers.Select(e => new Customer
{
FirstName = e.FirstName,
LastName = e.LastName,
UserName = e.UserName
})
.Take(1)
.Where(e => e.UserName != "Foo")
.Select(e => new CusomterDto { FullName = e.FirstName + " " + e.LastName }); |
If we put "Take()" in the different place, we will get different SQL.
Steps to reproduce
Take(1)
method call.1
If output the log, I can get the following information:
Be noted that it retrieves the "UserName" property, however that property doesn't used in the later.
2
If output the log, I can get:
Be noted that "UserName" property doesn't retrieve from the DB.
So, that's by design or did I make some mistaken or missed something? Thanks.
The text was updated successfully, but these errors were encountered: