Juste pour la postérité ...
Comme j'ai galéré pour le mettre au point, je partage un bout de code qui je l'espère aidera tous les newbies du Linq comme moi.
La problématique:
Un repeater à remplir avec une liste de commande (source un dataview).
Sur ce repeater, j'ai un filtre multiple critère. Or un de ces critères est le constructeur. Mais les constructeurs (les articles de la commandes) sont dans un 2eme dataview.
Solutions 1:
Je refais une requête SQL avec toutes la lourdeur de faire des appels entre mon site et la BDD
Solution 2:
Je fais un join par Linq de mes 2 dataview, donc un seul appel à la BDD
Ps: DAL.BacklogEntete est une classe qui me permet de remplir mon repeater directement dans la page *.aspx
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Dim Lines = dtvLigne.Table.AsEnumerable() Dim Entetes = dtvCommandes.Table.AsEnumerable() (From ent In Entetes Join Lin In Lines On ent("cIdDistri") Equals Lin("cIdDistri") And ent("cIdSociete") Equals Lin("cIdSociete") And ent("cRefCdeDistri") Equals Lin("cRefCdeDistri") _ Select New DAL.BacklogEntete With {.cIdDistri = ent("cIdDistri"), .cIdSociete = ent("cIdSociete"), .cRefCdeDistri = ent("cRefCdeDistri"), .dDateCommande = ent("dDateCommande"), _ .cDemandeur = ent("cDemandeur"), .cModeReglement = ent("cModeReglement"), .AdEmetteur = ent("AdEmetteur"), .AdLivraison = ent("AdLivraison"), _ .AdFacturation = ent("AdFacturation"), .cStatutCde2 = ent("cStatutCde2"), .cStatutFac = ent("cStatutFac"), _ .nTotalHT = ent("nTotalHT"), .nTotalTTC = ent("nTotalTTC"), .cComURL = ent("cComURL")}).ToList
Pour ceux comme moi, qui sur ce vieux projets, utilise un générateur de code pour les accès à la BDD, on peux rajouter des champs à la classe générée automatiquement en créant dans un autre fichier (sinon il sera écrasé par la prochaine génération de code automatique)
Code : Sélectionner tout - Visualiser dans une fenêtre à part <%# String.Format("{0:dd/MM/yyyy}", Eval("dDateCommande"))%>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Partial Class BacklogEntete Private _cDemandeur As String Public Property cDemandeur As String Get Return _cDemandeur End Get Set(value As String) _cDemandeur = value End Set End Property ... End Class
Partager