Cela dépend de quel type de linq que tu veux dire.
Est-il linq-to-sql? Dans ce cas, c'est un orm avec tous les avantages qui viennent de l'utilisation de tout autre orm. Je ne l'utilise pas beaucoup et ne peut pas vraiment en dire plus.
Est-il linq-to-objets? Dans ce cas, vous êtes vraiment parler d'une collection d'autres choses: les méthodes d'extension, paresseux itérateurs, et une requête de compréhension de la syntaxe. C'est une introduction dans le monde de la programmation fonctionnelle. Je n'ai pas beaucoup d'utilisation pour la requête compréhension de la syntaxe, mais pour le reste, je peux le démontrer par un exemple.
Disons que vous voulez lire un fichier ligne par ligne. Pour chaque ligne, vous voulez vérifier si elle répond à certains critères, de convertir une partie de ces lignes à un entier, et la somme des 10 premiers de ces entiers qui sont également dans une certaine plage. Voici le vieux chemin, vous pourriez faire cela:
int SumXValues(string filename)
{
string line;
int sum = 0;
int count = 0;
using (var rdr = new StreamReader(filename))
{
while ( (line = rdr.ReadLine()) != null && count < 10)
{
int val;
if (int.TryParse(line.Substring(3,3))
{
if (val > 4 && val < 25)
{
sum += val;
count ++;
}
}
}
}
return sum;
}
Voici la nouvelle façon:
IEnumerable<string> ReadLines(string filename)
{
string line;
using (var rdr = new StreamReader(filename))
while ( (line = rdr.ReadLine()) != null)
yield return line;
}
int SumXValues(string filename)
{
return ReadLines(filename)
.Select(l => l.Substring(3,3))
.Where(l => int.TryParse(l))
.Select(i => int.Parse(i))
.Where(i => i > 4 && i < 16)
.Take(10)
.Sum(i => i);
}
Notez le nouveau code est en fait plus courte. Mais pourquoi est-il aussi de mieux? Il y a (au moins) 4 raisons:
- J'espère que c'est évident de savoir comment re-utilisable de la readlines fonction. Vous pourriez facteur plus que bien, mais le point est de montrer comment ce style vous aide à la ré-utilisation du code plus.
- Il évolue mieux. De l'avis de tous l'enchaînement des appels de fonction dans cette dernière fonction. Vous savez combien de fois que le code s'itérateur sur les lignes dans votre fichier? Exactement une fois! En fait, même pas longtemps, il va arrêter de lire à partir du fichier après la prise de la première 10 articles. Et si vous changez le retour d'une énumération, puis l'utiliser ailleurs avec d'autres méthodes d'extension? Encore juste une fois! Cela vous permet de construire, mélanger, et re-mélangez les résultats de votre requête à l'exécution sans coûteuse des passages supplémentaires sur vos listes.
- C'est plus facile à gérer. Si les changements de critères, il est facile de repérer les l'exacte "règle" (si vous voulez) que vous vous souciez et de modifier simplement la partie.
- C'est plus lisible. Cela permet d'exprimer le code en fonction de ce qu'il est en train de faire, plutôt que de la façon dont il le fait.