using System.Collections.Generic;
public static void Main()
var settlmentChannels = new List<RegistrySettlementChannel> {
new RegistrySettlementChannel { ComponentSerialNumbers = "ABC", ChannelNumber = 1, RegisterContentCode = "UN" },
new RegistrySettlementChannel { ComponentSerialNumbers = "ABC", ChannelNumber = 2, RegisterContentCode = "EG" },
new RegistrySettlementChannel { ComponentSerialNumbers = "ABC", ChannelNumber = 3, RegisterContentCode = "UN" }
var meteringChannels = new List<IcpMeterChannel> {
new IcpMeterChannel { Serial = "ABC", ContentCode = "UN", ChannelNumber = 1 },
new IcpMeterChannel { Serial = "ABC", ContentCode = "CN", ChannelNumber = 2 },
new IcpMeterChannel { Serial = "ABC", ContentCode = "CN", ChannelNumber = 3 }
var matches = from s in settlmentChannels
join m in meteringChannels on
new {Serial = s.ComponentSerialNumbers, Channel = s.ChannelNumber, Content = s.RegisterContentCode}
equals new {Serial = m.Serial, Channel = m.ChannelNumber, Content = m.ContentCode}
from p in jointTable.DefaultIfEmpty()
select new { SettlementRegister = s.ComponentSerialNumbers, MeteringChannel = p == null ? "(No Matches)" : p.Serial };
foreach(var match in matches)
Console.WriteLine("{0} {1} ", match.SettlementRegister, match.MeteringChannel);
public class RegistrySettlementChannel
public string ComponentSerialNumbers { get; set; }
public int ChannelNumber { get; set; }
public string RegisterContentCode { get; set; }
public class IcpMeterChannel
public int ChannelNumber { get; set; }
public string Serial { get; set; }
public string ContentCode { get; set; }