Даже если он является типизированным набором данных, вы все равно можете использовать свойство DataTables объекта DataSet и свойства DataColumns объекта DataTable. Однако, чтобы использовать Linq с ними, вы должны вызвать .OfType<DataTable>()
или .OfType<DataColumn>()
для соответствующего свойства, чтобы превратить его в IEnumerable <>, чтобы вы могли выполнять запросы Linq к ним. После этого вам просто нужно проверить соответствующие свойства, чтобы узнать, что такое первичный ключ или внешний ключ. В последней части я не уверен, есть ли свойство для этих значений или вам необходимо проверить отношения данных, чтобы определить это.
EDIT:
На самом деле в DataTable есть свойство PrimaryKey, которое будет возвращать массив DataColumns, которые составляют PrimaryKey. Что касается внешних ключей, хотя я считаю, что вы должны изучить коллекцию DataRelations, чтобы определить, какие столбцы являются внешними ключами.