Ik heb een grid welke ik vul vanuit de database middels LINQ.
De data bestaat uit 3 tabellen:
- debtor
- debtorAddress (0-2 per debtor)
- debtorContact (0-xx per debtor)
de debtor tabel heeft de primary key op ID. De tabellen debtorAddress en debtorContact hebben een Foreign key relatie met de tabel debtor.
Nu moet de gebruiker kunnen zoeken in de data. Hiervoor heb ik een klein formuliertje gemaakt waarin ze kunnen zoeken op debiteurnaam, adres (debtorAddress) en contactpersoon naam (debtorContact). Echter krijg ik altijd alle records terug, dus heb even wat assistentie nodig bij het opbouwen van de LINQ query.
In SQL ziet de query er als volgt uit, waarbij de where statements even ter voorbeeld zijn van een zoekopdracht:
Bovenstaande query levert mij keurig 1 record op, wat ik ook verwacht.
In LINQ heb ik het als volgt:
Alleen dit werkt dus niet goed, omdat als bijvoorbeeld de variabele 'whereClauseContact' bijvoorbeeld leeg is hij altijd de default pakt, oftewel de gehele debiteur. Hiermee krijg ik dus altijd alle records terug, tenzij ik beide whereclauses vul.
Iemand een idee hoe ik dit aan kan pakken?
De data bestaat uit 3 tabellen:
- debtor
- debtorAddress (0-2 per debtor)
- debtorContact (0-xx per debtor)
de debtor tabel heeft de primary key op ID. De tabellen debtorAddress en debtorContact hebben een Foreign key relatie met de tabel debtor.
Nu moet de gebruiker kunnen zoeken in de data. Hiervoor heb ik een klein formuliertje gemaakt waarin ze kunnen zoeken op debiteurnaam, adres (debtorAddress) en contactpersoon naam (debtorContact). Echter krijg ik altijd alle records terug, dus heb even wat assistentie nodig bij het opbouwen van de LINQ query.
In SQL ziet de query er als volgt uit, waarbij de where statements even ter voorbeeld zijn van een zoekopdracht:
SQL:
1
2
3
4
5
| SELECT distinct Debtor.* FROM Debtor left JOIN DebtorAddress ON Debtor.DebtorID = DebtorAddress.debtorID left JOIN DebtorContact ON Debtor.DebtorID = DebtorContact.debtorID WHERE Debtor.MemberID = 1269 and Debtor.Deleted = 0 and Debtor.ParentID is null and DebtorContact.lastname like 'vel%' |
Bovenstaande query levert mij keurig 1 record op, wat ik ook verwacht.
In LINQ heb ik het als volgt:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| from debt in dc.Debtors.Where(whereClause) join debAddr in dc.DebtorAddresses.Where(whereClauseAddress) on debt.DebtorID equals debAddr.debtorID into debt_addr from debAddr in debt_addr.DefaultIfEmpty() join debCon in dc.DebtorContacts.Where(whereClauseContact) on debt.DebtorID equals debCon.debtorID into debt_cont from debCon in debt_cont.DefaultIfEmpty() where debt.Deleted == false select debt; |
Alleen dit werkt dus niet goed, omdat als bijvoorbeeld de variabele 'whereClauseContact' bijvoorbeeld leeg is hij altijd de default pakt, oftewel de gehele debiteur. Hiermee krijg ik dus altijd alle records terug, tenzij ik beide whereclauses vul.
Iemand een idee hoe ik dit aan kan pakken?