using System.Collections.Generic;
public static void Main()
var a = new Item {Name = "A"};
var b = new Item {Name = "B"};
var c = new Item {Name = "C"};
var d = new Item {Name = "D"};
var e = new Item {Name = "E"};
var alternativeGroup1 = new ItemGroup {Id = 1};
var alternativeGroup2 = new ItemGroup {Id = 2};
var items = new List<Item>()
a.AlternativeGroupId = alternativeGroup1.Id;
b.AlternativeGroupId = alternativeGroup1.Id;
c.AlternativeGroupId = alternativeGroup1.Id;
d.AlternativeGroupId = alternativeGroup2.Id;
e.AlternativeGroupId = alternativeGroup2.Id;
foreach(var item in items)
var itemAlternatives = items.Where(x=> x != item && x.AlternativeGroupId == item.AlternativeGroupId);
Console.Write($"Item {item.Name} has the alternatives: ");
foreach(var alternative in itemAlternatives)
Console.Write($"{alternative.Name} ");
public string Name {get; set;}
public long? AlternativeGroupId {get; set;}
public long Id {get; set;}