Problem z zapytaniem Linq

0

Cześć

Jak rozwiązać ten problem?

W oznaczonym miejscu otrzymuję błąd:

The name 'x' is not in scope on the right side of 'equals'.  Consider swapping the expressions on either side of 'equals'.

Błąd w linijce
m = x.Month > 12 ? x.Month : z.Month

    var qry = from l in PPP
                  where l.CompanyId == Cid && l.RowNo == "1000" && l.Year >= 2022
                  join x in HHH on new { cid = l.CompanyId, id = l.HeaderId } equals new { cid = x.CompanyId, id = x.Id }
                  join z in ZZZ on new { cid = l.CompanyId, y = x.Year, m = x.Month } equals new { cid = z.CompanyId, y = z.Year, m = x.Month > 12 ? x.Month : z.Month } Select new OBJ {...}
0

Próbowałeś zamienić stronami wyrażenie jak sugeruje kompilator? Czyli:

join z in ZZZ on new { cid = z.CompanyId, y = z.Year, m = x.Month > 12 ? x.Month : z.Month } equals new { cid = l.CompanyId, y = x.Year, m = x.Month } Select new OBJ {...}
0
markone_dev napisał(a):

Próbowałeś zamienić stronami wyrażenie jak sugeruje kompilator? Czyli:

join z in ZZZ on new { cid = z.CompanyId, y = z.Year, m = x.Month > 12 ? x.Month : z.Month } equals new { cid = l.CompanyId, y = x.Year, m = x.Month } Select new OBJ {...}

Po zamianie jest

The name 'z' is not in scope on the left side of 'equals'.  Consider swapping the expressions on either side of 'equals'.
0

Wygląda, że to z lub x jest poza zakresem wyrażenia. Nie wiem jaką tam masz strukturę pod spodem na której operujesz, ale ogólna zasada w joinach linq jest taka, że pierwszym parametrem equals jest id zewnętrznej kolekcji a drugim wewnętrznej kolekcji:

from id_1 in {outer-sequence} 
join id_2 in {inner-sequence} 
on {outer-key-selector} equals {inner-key-selector}

Jeżeli zrobisz odwrotnie, to dostaniesz ten błąd, że cośtam is not in scope on the left side of 'equals'.

Dobrze przeanalizuj zagnieżdżenia w tym linq bo ewidentnie z tym jest problem.

0
markone_dev napisał(a):

Chodzi generalnie o to jak ułożyć linq by finalnie otrzymać takie zapytanie SQL gdzie w łączeniu widać warunek:

select * from
	PPPP p
	inner join ZZZ z on p.CompanyId = z.CompanyId and p.Year = z.Year 
	and p.Month = case when p.Month > 12 then ((z.Month-1)/3)+13 else z.Month end

1 użytkowników online, w tym zalogowanych: 0, gości: 1