-
-
Notifications
You must be signed in to change notification settings - Fork 516
Multiple bindings with the same value #666
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
Comments
There is a hidden feature that allows you to define a variable and use it multiple times. using static SqlKata.Expressions;
var query = new Query("Users")
.Define("Today", DateTime.Today)
.Where("CreatedAt", Variable("Today"))
.Where("PublishedAt", ">", Variable("Today")); Check the example here. This is not publicly documented since it may be changed or removed later, so consider this if you decide to use it. |
Thanks for the answer. Would it be correct? var query = new Query("Users")
.Define("Today", DateTime.Today)
.OrderByRaw("CASE WHEN StartDate < ? and (EndDate is null or EndDate > ?) THEN 0 WHEN StartDate > ? THEN 1 ELSE 2 END",
bindings: new object[] { Variable("Today"), Variable("Today"), Variable("Today") }) It doesn't make sense to me. Would be nice to have named parameters, so I can use them in raw queries like this: var query = new Query("Users")
.Define("Today", DateTime.Today)
.WhereRaw("DATEPART('weekday', @Today) = 3")
.OrderByRaw("CASE WHEN StartDate < @Today and (EndDate is null or EndDate > @Today) THEN 0 WHEN StartDate > @Today THEN 1 ELSE 2 END") |
Sorry for bringing this up two years later, but having the same issue and after consideration also think it doesn't make sense. The expectation of a variable is that it would be named in the query, and importantly also only needed to be bound once. This is relevant in, for example, cursor based pagination where one would do something like this SELECT *
FROM Users
WHERE
(LastName > 'Smith')
OR (LastName = 'Smith' AND FirstName < 'John')
OR (LastName = 'Smith' AND FirstName = 'John' AND Id > 42)
ORDER BY
LastName ASC,
FirstName DESC,
Id ASC
OFFSET 0 ROWS FETCH NEXT 25 ROWS ONLY; where the current solution would require the parameters:
while with named variables we would just have
which perhaps don't make that much of a practical difference, but I do think the latter is the expected implementation. Or maybe I am just missing something ;) |
Uh oh!
There was an error while loading. Please reload this page.
I am trying to get some query working which includes binding value multiple times:
eg.
Is there any way to modify query in a way, so the
DateTime.Today
declared only ones.Doc says nothing about that.
The text was updated successfully, but these errors were encountered: