using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp12
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Button1_Click(object sender, EventArgs e)
{
List<a> aa = new List<a>();
List<b> bb = new List<b>();
List<c> cc = new List<c>();
aa.Add(new a(1));
aa.Add(new a(2));
aa.Add(new a(3));
aa.Add(new a(4));
aa.Add(new a(5));
bb.Add(new b(1, 93));
bb.Add(new b(2, 83));
bb.Add(new b(3, 63));
cc.Add(new c(2, 63));
cc.Add(new c(3, 43));
cc.Add(new c(4, 33));
//将 a,b,c 使用 ID 级联 组合
var query = from aaa in aa
join bbb in bb on aaa.ID equals bbb.ID into bbb
from bbb2 in bbb.DefaultIfEmpty()
join ccc in cc on aaa.ID equals ccc.ID into ccc
from ccc2 in ccc.DefaultIfEmpty()
select new a(aaa.ID)
{
i= bbb2== null ? null: bbb2.i,
j= ccc2== null ? null : ccc2.j
};
aa= query.ToList<a>();
}
}
public class a
{
public a()
{
i = -1;
j = -1;
}
public a(int id){
ID = id;
i = 0;
j = 0;
}
public int ID;
public int? i;
public int? j;
}
public class b
{
public b(int id,int val)
{
ID = id;
i=val;
}
public int ID;
public int? i;
}
public class c
{
public c(int id, int val)
{
ID = id;
j = val;
}
public int ID;
public int? j;
}
}