I expect your code to fail as it implicitly assumes one row index in three tables will produce the same SNAME value, which your example data does not.
You seem to want an INNER JOIN of three DataTables?
With database tables and SQL that should be straightforward.
With DataTables, you can achieve the same; and LINQ can be applied as shown here:
Inner join of DataTables in C# - Stack Overflow[
^]
:)