Я думаю, что вы могли бы сделать это, присоединив последовательность к себе при условии, что поле first
равно. Ниже приведен пример кода, который делает это. Результат также показан ниже. Обратите внимание, что в результате этого кода обнаружены повторяющиеся совпадения, поэтому вам, возможно, придется учесть это.
class Program
{
class MyClass
{
public int ID;
public int first;
public int second;
}
static void Main(string[] args)
{
// create a sequence containing example data
List<MyClass> sequence = new List<MyClass>();
sequence.AddRange(new MyClass[] {
new MyClass { ID = 1, first = 0, second = 10 },
new MyClass { ID = 2, first = 1, second = 11 },
new MyClass { ID = 3, first = 2, second = 12 },
new MyClass { ID = 4, first = 0, second = 10 },
new MyClass { ID = 5, first = 1, second = 20 },
new MyClass { ID = 6, first = 2, second = 30 },
new MyClass { ID = 7, first = 0, second = 0 },
new MyClass { ID = 8, first = 1, second = 11 },
new MyClass { ID = 9, first = 2, second = 12 },
});
var matches = from x in sequence
join y in sequence // join sequence to itself
on x.first equals y.first // based on the first field
where
!object.ReferenceEquals(x, y) // avoid matching an item to itself
&& x.second != y.second // find cases where the second field is not equal
select new { X = x, Y = y }; // return a "tuple" containing the identified items
foreach (var match in matches)
{
Console.WriteLine("Found first:{0}, x.second:{1}, y.second:{2}, x.ID:{3}, y.ID:{4}", match.X.first, match.X.second, match.Y.second, match.X.ID, match.Y.ID);
}
}
}
Вывод этой программы следующий:
Сначала найдено: 0, секунда x: 10, секунда y: 0, идентификатор id: 1, идентификатор id: 7
Первый найден: 1, х.секунда: 11, у.секунда: 20, х.ID:2, у.ID: 5
Сначала найдено: 2, х.секунда: 12, у.секунда: 30, х.ID:3, у.ID:6
Первый найден: 0, секунда x: 10, секунда y: 0, идентификатор ID: 4, идентификатор id: 7
Найдено первым: 1, х.секунда: 20, г.секунда: 11, х.ID:5, y.ID:2
Сначала найдено: 1, х.секунда: 20, у.секунда: 11, х.ID:5, у.ID:8
Сначала найдено: 2, х.секунда: 30, у.секунда: 12, х.ID:6, у.ID:3
Обнаружено первое: 2, х.секунда: 30, у.секунда: 12, х.ID:6, у.ID:9
Сначала найдено: 0, секунда x: 0, секунда y: 10, идентификатор ID: 7, идентификатор id: 1
Сначала найдено: 0, х.секунда: 0, у.секунда: 10, х.ID:7, у.ID:4
Обнаружено первое: 1, х.секунда: 11, у.секунда: 20, х.ID:8, у.ID:5
Обнаружено первое: 2, х.секунда: 12, у.секунда: 30, х.ID:9, у.ID:6