2009-06-05 6 views
2

J'apprends linq à sql et j'essaye de configurer une zone de liste déroulante de recherche dans ma page Web. J'utilisais une source de données linq mais j'ai ensuite déplacé mon code linqtosql dans sa propre bibliothèque de classes pour ma DLL DAL (sortie du dossier app_code). Donc, je suis en train de convertir le code de la page pour pouvoir encore avoir des recherches effectuées maintenant par un objet biz.Linq To SQL DAL et source de données de recherche

Voici ce que je l'ai fait dans ma couche biz ...

Public Class KosherTypes 

    Public Shared Function GetKosherTypes() As List(Of KosherTypeLookup) 
     Dim db As New DBDataContext 

     Dim types = From kt In db.KosherTypes _ 
        Where kt.IsDeleted = False _ 
        Order By kt.Name _ 
        Select New KosherTypeLookup With {.Name = kt.Name, .ID = kt.KosherTypeID} 

     Return types.ToList 

    End Function 

End Class 

je puis configurer une source de données objet et cartographiés à cette classe.

J'ai quelques questions que quand je faisais des recherches sur Internet, je ne l'ai pas trouvé personne qui semblait faire cela et pourtant je sais que tables de référence/boîtes combo sont communes ...

  1. Est-ce Je rate tout simplement quelque chose et il y a de meilleures façons de le faire?

  2. Je suis allé avec le retour d'une liste mais j'aurais pu renvoyer un IEnumerable ou IQueryable. Dans ma lecture, il semblait que IQueryable avait plus de fonctionnalités pour linq à sql mais comme je retourne une simple liste à deux colonnes, j'ai seulement besoin de retourner un IEnumerable ou un List. Je suis allé avec une liste car elle est fortement typée. Ai-je pris une bonne décision? AKA - Dois-je juste revenir et IEnumerable ou peut-être allé avec IQueryable?

Merci!

Répondre

1

Je vais répondre dans l'ordre inverse:

  1. Je ne voudrais pas utiliser IQueryable en dehors de vos prises en pension/DAL pour la simple raison que depuis l'exécution est différée, vous perdez le contrôle de ce qui est exactement exécuté (par exemple, une fonction aribtrary pourrait être assignée en tant que délégué pour WHERE), rendant la maintenance et les tests beaucoup plus difficiles. Je ne vois pas de problème avec vous renvoyer un IEnumberable (Of KosherTypeLookup) cependant.
  2. Si la recherche est une recherche statique qui ne change jamais ou rarement, vous pouvez chercher un moyen de mettre en cache la recherche après la première utilisation, pour éviter d'avoir à frapper la base de données chaque fois que cette boîte est appelée. Cela dépend vraiment de votre charge prévue, cependant. Comme toujours, les tests de performance/charge mettront en évidence les points à optimiser.