By looking at the code, the below code is returning a collections (1 or more)
from DataRow dr in dtDetails.Rows
where dr["ID"].ToString() == Id
select dr
The best altrernative, I think is to loop through the object and import the row into the dtTable object.
var misteryObject = from DataRow dr in dtDetails.Rows
where dr["ID"].ToString() == Id
select dr;
foreach (DataRow dr in misteryObject )
{
dtTable.ImportRow(dr);
}