[LINQ] Réaliser des filtres successifs sur un wrapper d'objets
Hello,
Je rentre directement dans le vif du sujet avec un bout de code...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
Private Sub btnFilter_Click(sender As Object, e As EventArgs)
Dim data = (From d In Promo.DTO.DetailsDemo
Select Id = d.Id, Department = d.CodeDemo.Department, CodeDemo = d.CodeDemo, Percentage = d.Percentage, Description = d.Description, Note = d.Note, ListType = d.ListType
From d In Promo.DTO.DetailsDepartment
Select Id = d.Id, Department = d.Department, CodeDemo = New PROMO_DTO.CodeDemo(0, "0000", "", "", Nothing, Nothing, Nothing, Nothing, Nothing, False), Percentage = d.Percentage, Description = d.Description, Note = d.Note, ListType = d.ListType).ToList
If ckbDepartment.Checked Then
data = (From d In data
Where d.Department.Id = CShort(cbDepartment.SelectedValue)
Select d).ToList
End If
If ckbConcession.Checked Then
data = (From d In data
Where d.CodeDemo.Id = CInt(cbConcession.SelectedValue)
Select d).ToList
End If
If ckbPercent.Checked Then
data = (From d In data
Where d.Percentage = nudPercent.Value
Select d).ToList
End If
dgvDemo.DataSource = data
End Sub |
J'ai donc data qui est wrapper autour d'objets similaire mais différents (l'un possède une propriété CodeDemo et l'autre non). Or j'ai besoin de donner la possibilité à l'utilisateur de filtrer le contenu de ce wrapper suivant 3 critères qui peuvent se combiner.
J'ai donc utiliser des checkboxes pour activer ou non le critère de filtrage et si c'est coché, je fais le filtre.
A priori, je trouve ça plutôt propre mais j'aurais voulu avoir votre avis.
Aussi, je cherche une manière plus élégante pour boucher le trou que devrait occuper la propriété CodeDemo dans la 2e selection de mon wrapper...
Actuellement, j'ai donc ceci (je remets le code du dessus) :
Code:
1 2 3 4
| Dim data = (From d In Promo.DTO.DetailsDemo
Select Id = d.Id, Department = d.CodeDemo.Department, CodeDemo = d.CodeDemo, Percentage = d.Percentage, Description = d.Description, Note = d.Note, ListType = d.ListType
From d In Promo.DTO.DetailsDepartment
Select Id = d.Id, Department = d.Department, CodeDemo = New PROMO_DTO.CodeDemo(0, "0000", "", "", Nothing, Nothing, Nothing, Nothing, Nothing, False), Percentage = d.Percentage, Description = d.Description, Note = d.Note, ListType = d.ListType).ToList |
C'est donc le New PROMO_DTO.CodeDemo(0, "0000", "", "", Nothing, Nothing, Nothing, Nothing, Nothing, False) qui m'ennuie. Je peux mettre nothing et le wrapper est valide mais la propriété du type anonyme est alors de type Object et non pas de type CodeDemo et du coup, pas moyen de faire le filtre (à moins que je puisse faire un cast au moment du filtrage... je viens d'y penser).
J'aimerais assez ne pas devoir créer un dummy CodeDemo dans ce second select.
Une idée ?? (j'ai tenté la recherche sur le net mais vu que j'ignore les mots clefs à utiliser, je n'ai pas trouvé mon bonheur)