2010-08-02 9 views

Répondre

6

Lequel est le mieux pour votre situation? Ou, plus important encore, la différence de vitesse pour la quantité de données que vous interrogez vaut-elle la peine de choisir l'une par rapport à l'autre? À mon avis, LINQ est généralement plus facile à lire que n'importe quel autre type de filtrage de données et présente l'avantage d'être au moins partiellement typé, ce qui rend plus difficile les erreurs.

// Using DataTable.Select() 
DataRow[] records = myTable.Select("(MyIntField > 30 AND MyStringField == 'StringValue') OR AnotherField > 70"); 

// Using LINQ 
var records = from record in myTable.AsEnumerable() 
       where (record.Field<int>("MyIntField") > 30 
        && Record.Field<string>("StringValue") == "StringValue") 
        || 
        (record.Field<int>("AnotherField") > 70) 
       select record; 

La requête LINQ est plus grande, mais personnellement, je pense qu'il est plus lisible

+0

y at-il une différence de performance sera là si j'utilise LINQ sur Datatable.Select()? –

+0

@Kishore, comme je l'ai dit, vous aurez vraiment besoin de tester cela vous-même. Cela va varier selon ** la quantité de données que vous retournez ** et ** la complexité du filtre que vous tentez d'appliquer aux données **. S'il y a une différence de performance, elle peut être si petite qu'elle ne vaut pas la peine d'être inquiétée. – Rob

+2

@Kishore: Si vous voulez avant tout des performances, n'utilisez pas non plus. Allez bas. –

-3

Si tu veux une exécution plus rapide puis Datatable.Select() ou vous pouvez aller pour LINQ

+0

mais c'est ce que l'OP a dit. –

0

Lequel sera le plus rapide? Vous seul pouvez dire.

  • Quelle est la quantité de données
  • Combien de dossiers sont renvoyés
  • Comment avez-vous l'intention d'utiliser le résultat par exemple utiliserez-vous toujours chaque enregistrement dans le résultat?
  • Quelle est la complexité du filtre

Tous ceux qui peuvent avoir un impact solution sera le plus rapide. Comme toujours, si vous n'avez pas de problème de performances, n'optimisez pas. Si vous avez un problème de performance, utilisez un profil pour savoir où optimiser.

Si vous n'avez pas de preuve tangible que le problème de sélection est un problème de performance, optez pour la lisibilité. Dans mon esprit, cela se traduit par la solution LINQ.

Questions connexes