using System.Collections.Generic;
public string Metal { get; set; }
public string value { get; set; }
public static void Main()
var data = new List<DataItem> {
new DataItem { Metal = "silver", value = "5" },
new DataItem { Metal = "silver_ref", value = "Y" },
new DataItem { Metal = "gold", value = "2" },
new DataItem { Metal = "gold_ref", value = "N" },
new DataItem { Metal = "iron", value = "N" },
new DataItem { Metal = "iron_ref", value = "N" }
join d2 in data on (d1.Metal + "_ref") equals d2.Metal
where d1.value != "N" && d2.value == "Y"
foreach (var item in query)
Console.WriteLine($"DataItem{{ Metal: {item.Metal}, value: {item.value} }}");