Skip to content
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

LINQ uses ternary expressions to generate error SQL #3591

Open
HmgsLJ opened this issue Jul 29, 2024 · 2 comments
Open

LINQ uses ternary expressions to generate error SQL #3591

HmgsLJ opened this issue Jul 29, 2024 · 2 comments

Comments

@HmgsLJ
Copy link

HmgsLJ commented Jul 29, 2024

I ran into a puzzle that using LINQ in a query expression under NET8 and NHibernate5.5.2 uses a ternary expression, and the resulting SQL doesn't look right, the code is as follows:

            var query = (from t in session.Query<Test>()
                               select new
                               {
                                   t.Id,
                                   NameSeq = (t.Name == "One" ? 1 : t.Name == "Tow" ? 2 : 0)
                               }).OrderBy(o => o.NameSeq)
                               .ToList();

By normal logic it should generate the sql:

        test0_."Id" as col_0_0_,
        (case 
            when test0_."UserName"=:p0 then :p3 
            else (case 
                when test0_."UserName"=:p1 then :p5 
                else :p6 
            end) 
        end) as col_1_0_ 
    from
        "Test" test0_ 
    order by
        (case 
            when test0_."UserName"=:p0 then :p3 
            else (case 
                when test0_."UserName"=:p1 then :p5 
                else :p6 
            end) 
        end) asc;

But in reality, it is like this:

select
        test0_."Id" as col_0_0_,
        case 
            when test0_."UserName"=:p0 then TRUE 
            else FALSE 
        end as col_1_0_,
        case 
            when test0_."UserName"=:p1 then TRUE 
            else FALSE 
        end as col_2_0_ 
    from
        "Test" test0_ 
    order by
        (case 
            when test0_."UserName"=:p0 then :p3 
            else (case 
                when test0_."UserName"=:p1 then :p5 
                else :p6 
            end) 
        end) asc;

I want to know how to generate SQL correctly because I need deduplication and I can't do that with my current SQL, which is very thankful.

@hazzik
Copy link
Member

hazzik commented Jul 29, 2024

under NET8

Does it work correctly with lower versions?

@HmgsLJ
Copy link
Author

HmgsLJ commented Jul 29, 2024

under NET8

Does it work correctly with lower versions?
Yes, I tried .NET Core 3.1 and got the same error SQL as above..

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants