result = From tl1 In dt1.AsEnumerable _
From tl2 In dt2.AsEnumerable.Where(Function(m) m.Field(Of String)("code") = tl1.Field(Of String)("code")).DefaultIfEmpty() _
Select New With _
{ _
.id = tl1!id, _
.code = tl1!code, _
.name = If(tl2 Is Nothing, "", tl2!name) _
}