Я склонен согласиться с jcollum в этом вопросе, поэтому использование Typed Dataset во время выполнения, вероятно, неправильный путь. Если, с другой стороны, вы просто хотите иметь возможность получать структурированные данные (или DataTable) из базы данных во время выполнения, вы можете использовать отражение для создания TableAdapter из произвольного результата данных.
var results = (from data in db.SomeTable select data).ToArray();
DataTable dt = ObjectArrayToDataTable(results);
// At this point you have a properly structure DataTable.
// Here is your XSD, if absolutely needed.
dt.WriteXMLSchema("c:\somepath\somefilename.xsd");
private static System.Data.DataTable ObjectArrayToDataTable(object[] data)
{
System.Data.DataTable dt = new System.Data.DataTable();
// if data is empty, return an empty table
if (data.Length == 0) return dt;
Type t = data[0].GetType();
System.Reflection.PropertyInfo[] piList = t.GetProperties();
foreach (System.Reflection.PropertyInfo p in piList)
{
dt.Columns.Add(new System.Data.DataColumn(p.Name, p.PropertyType));
}
object[] row = new object[piList.Length];
foreach (object obj in data)
{
int i = 0;
foreach (System.Reflection.PropertyInfo pi in piList)
{
row[i++] = pi.GetValue(obj, null);
}
dt.Rows.Add(row);
}
return dt;
}
Вы можете применить тот же принципал для создания структурированного DataSet и легко создать для него DataAdapter.
Или, возможно, я неправильно понимаю ваши требования.