2009-08-09 7 views
0

Lorsque vous exécutez Linq sur Sql ou Linq to Entites pour obtenir une liste d'enregistrements, il exécute la requête pour sélectionner tous les champs d'une table. Est-ce une solution efficace. Disons que: Je lance ce LINQQuel est le moyen efficace d'obtenir des données de DB en utilisant LINQ To SQL ou LINQ To Entities?

dim lstCustomers = from c in db.Customers select c 

courir requête pour obtenir tous les champs d'une table si j'ai besoin tous les champs ou non. J'utilise asp.net MVC avec donc devrais-je écrire cette requête en vue (où j'ai seulement besoin CustomerID et nom)

dim lstCustomers = from c in db.Customers _ 
         select new Customer with { c.CustomerID, c.Name } 

Si je dois utiliser 2ème requête alors ce qui est l'avantage de LINQ et Entity Framework. Ce que je peux faire avec une requête SQL (avec une syntaxe différente)

Quelqu'un peut-il aider? Tout d'abord, les requêtes LINQ sont évaluées paresseusement.

Répondre

2

Cela signifie que la ligne unique ne fait rien d'autre que lui-même, donc je suppose que vous itérez réellement les résultats avec For Each.

La réponse à votre première question est oui, tous les champs sont extraits de la base de données avec la première déclaration.

Oui, mais afin d'utiliser SQL directement, vous devrez créer manuellement des classes d'entités, récupérer manuellement des données en utilisant SqlDataReader ou quelque chose pour atteindre le niveau d'abstraction fourni par LINQ dans cette ligne. C'est beaucoup plus de travail en votre nom. Avec LINQ to SQL, vous n'avez même pas besoin d'écrire explicitement du code pour ouvrir une connexion à la base de données.

0

actuly LINQ ont différents ensembles d'avantages par rapport à écrire des requêtes normales sql d'écriture:

si vous avez écrit des requêtes SQL, alors les étapes surchargées:
1. vous avez besoin d'une classe de connexion SQL
2. Vous avez besoin d'un commande sql ou sqldataadapter.
3. alors vous avez besoin d'un conteneur comme datatable et dataset. Ainsi, tout en utilisant LINQ, vous n'avez pas besoin de toutes ces étapes. il suffit d'écrire les requêtes comme vous l'avez écrit ci-dessus. En outre, si vous avez écrit quelque chose de incorrect dans votre sqlquery, il n'y a pas d'erreur de compilation. erreur ne génère que lorsque vous exécutez la requête pendant l'exécution.
mais contrairement aux requêtes sql, linq vous fournit l'erreur de temps de compilation.

aussi linq est le meilleur des collections de type fortement.