public static void Main()
DataTable dt1 = new DataTable();
dt1.Columns.Add("emp_num", typeof(int));
dt1.Columns.Add("col1", typeof(string));
DataRow row1 = dt1.NewRow();
DataRow row2 = dt1.NewRow();
DataRow row3 = dt1.NewRow();
DataRow row4 = dt1.NewRow();
DataTable dt2 = new DataTable();
dt2.Columns.Add("emp_num", typeof(int));
DataRow row5 = dt2.NewRow();
DataRow row6 = dt2.NewRow();
var result = from t1 in dt1.AsEnumerable()
join t2 in dt2.AsEnumerable()
on t1.Field<int>("emp_num") equals t2.Field<int>("emp_num") into g
from foo in g.DefaultIfEmpty()
emp_num = t1.Field<int>("emp_num"),
col1 = t1.Field<string>("col1"),
flag = foo != null ? 1 : 0
Console.WriteLine("emp_num\tcol1\tflag");
foreach (var item in result)
Console.WriteLine("{0}\t{1}\t{2}", item.emp_num, item.col1, item.flag);