Name properties of anonymous type of join
:
var collection = from t1 in dt1.AsEnumerable()
join t2 in dt2.AsEnumerable()
on new { PropertyA= t1["main_code"], PropertyB=t1["year"]} equals new { PropertyA=t2["dep_code"], PropertyB=t2["dep_year"] }
select new { emp_name = t1["name"], bonus_desc = t1["bonus_desc"],dep_name = t2["dep_name"] };