using System.Collections.Generic;
public static void Main()
var data = (from a in _db.Table_A()
join b in _db.Table_B() on a.ID_A equals b.ID_A
join c in _db.Table_C() on new { a.ID_A,b.ID_B} equals new { c.ID_A,c.ID_B }
foreach(var detail in data)
Console.WriteLine("ID_A = {0}, data_A = {1}",detail.ID_A,detail.data_A);
public List<TableA> Table_A()
var list = new List<TableA>();
list.Add(new TableA(){ID_A = 1, data_A="a"});
list.Add(new TableA(){ID_A = 2, data_A="b"});
public List<TableB> Table_B()
var list = new List<TableB>();
list.Add(new TableB(){ID_A = 1, data_B=2,ID_B=1});
list.Add(new TableB(){ID_A = 2, data_B=3,ID_B=2});
public List<TableC> Table_C()
var list = new List<TableC>();
list.Add(new TableC(){ID_C = 1, data_C=1, ID_A = 1, ID_B =1});
list.Add(new TableC(){ID_C = 1, data_C=1, ID_A = 1, ID_B =null});
public int ID_A{ get;set;}
public string data_A {get;set;}
public int ID_B{ get;set;}
public int data_B {get;set;}
public int ID_A{get;set;}
public int ID_C{ get;set;}
public int data_C {get;set;}
public int ID_A{get;set;}
public int? ID_B{get;set;}