1. На Linq свет клином не сошелся, это в любом случае синтаксический сахар и под капотом будет развернуто в простые циклы... так что лучше писать так, как понятнее лично Вам...
2. Вы бы поиском воспользовались или документацией, у List<> есть методы .Intersect(), .Except() и другие, предназначенные именно для сравнения последовательностей...
Как пример: найти всех учеников с одинаковыми именами и суммировать их возраст...
Пару строк кода....
using System;
using System.Collections.Generic;
using System.Linq;
class Man
{
public string Name {get; set;}
public int Age {get; set;}
}
public class Program
{
public static void Main()
{
List<Man> mans = new List<Man>();
mans.Add(new Man() { Name = "Vova", Age = 5 });
mans.Add(new Man() { Name = "Peta", Age = 7 });
mans.Add(new Man() { Name = "Vova", Age = 12 });
//LINQ
List<KeyValuePair<string, int>> result = mans
.GroupBy(l => l.Name)
.Select(cl => new KeyValuePair<string, int>
(
cl.First().Name,
cl.Sum(c => c.Age)
)).ToList();
foreach (var a in result)
Console.WriteLine(a.ToString());
//LOOPS
Dictionary<string, int> nnn = new Dictionary<string, int>();
foreach (var m in mans)
{
if (nnn.ContainsKey(m.Name))
nnn[m.Name] += m.Age;
else
nnn.Add(m.Name, m.Age);
}
foreach (var a in nnn)
Console.WriteLine(a.ToString());
}
}
Результат:
[Vova, 17]
[Peta, 7]
[Vova, 17]
[Peta, 7]
только все это пустое и как видно спокойно заменяется обычным циклом, что проще и понятнее. Это я к тому, что не нужно усложнять код только для того, что бы сделать его "умнее".