J'utilise Linq to Sql avec Predicate Builder et j'essaie d'optimiser la quantité d'informations extraites de la base de données. Je voudrais sélectionner seulement certains champs pour les afficher dans une grille. Lorsque je sélectionne uniquement ce que je veux, les paramètres de recherche que j'ajoute (voir ci-dessous) ne fonctionnent pas, pas plus que PredicateBuilder. Voici ce que je suis en train de faire (qui fonctionne, mais obtient tout ce qui est beaucoup trop d'info)Linq to Sql - Sélectionnez uniquement certaines informations (avec Predicate Builder)
' Initial Setup '
Dim db As New MyDataContext()
Dim results = From p In db.Products _
Select p
' Search '
If (testCase) Then
results = results.Where(Function(p) p.SomeAttribute = 123)
End If
Si je change que seulement sélectionner ce que je dois, comme ceci:
Dim results = From p In db.Products _
Select p.Name, p.SomethingElse
puis J'ai remarqué que si l'information est sélectionnée (ie je sélectionne p.SomeAttribute) alors je peux chercher (ajouter la clause where) sur cet attribut, mais si ce n'est pas le cas, je ne peux pas. Et avec le constructeur de prédicat, cela ne fonctionne que si je sélectionne l'ensemble de l'élément (c'est-à-dire que je sélectionne p). Tout ce qui devrait être fait est de créer des instructions SQL qui n'ont pas à sélectionner l'attribut à rechercher par lui. Comment puis-je faire en sorte que cela fonctionne et que je sélectionne seulement ce dont j'ai besoin, mais que je recherche par n'importe quoi et que je continue à travailler sur un constructeur de base? Toute aide BEAUCOUP APPRECIEE! Merci
Salut, je l'avais déjà essayé et il donne cette erreur: Impossible de lancer l'objet de type 'System.Data.Linq.DataQuery'1 [VB $ AnonymousType_0'3 [System.Int32, System.Int32, System .String]] 'pour taper' System.Linq.IQueryable'1 [MyNamespace.Product] '. Des idées autour de celui-là? – Ryan
Il y avait un bogue dans mon exemple qui donnerait cette erreur - j'ai mis à jour l'exemple pour le réparer. –
Je l'ai eu juste après avoir commenté cela, désolé. Mais votre solution est exactement ce que je cherchais. Merci! – Ryan