У меня есть следующий код, который выполняет импорт из SQL в F # и переводит информацию в матрицу.
У меня есть пример пользователей, имеющих 4 критерия, но если я хочу добавить еще 2 критерия, например (и количество критериев может измениться), мне придется сделать это вручную (в этом коде измерение не выполняется автоматически и названия столбцов должны быть написаны).
Это решение работает, но я должен вручную проверить эволюцию в таблице SQL и вручную изменить имя столбцов в моем коде, что вскоре будет очень болезненным. Итак, мой вопрос:
Видите ли вы способ автоматического учета размеров таблицы SQL и, в более общем смысле, есть ли способ выполнить этот импорт без необходимости вручную писать имя каждого столбца ("Criteria0_ID" и т. Д. название колонки в SQL ")? Заранее спасибо!
type user = {
Criteria0_ID : int;
Criteria1_ID : int;
Criteria2_ID : int;
Criteria3_ID : int}
// Extraction from SQL
module ReadSQl =
let GetUsers = seq {
let connStr = new SqlConnectionStringBuilder(DataSource="localhost\sqlexpress", IntegratedSecurity=true, InitialCatalog="TestExtractionF#")
use cnn = new SqlConnection(connStr.ConnectionString)
use cmd = new SqlCommand("SELECT * FROM SyntheseTest", cnn)
cnn.Open()
use reader = cmd.ExecuteReader()
while reader.Read() do
yield {
Criteria0_ID = unbox(reader.["Criteria0_ID"])
Criteria1_ID = unbox(reader.["Criteria1_ID"])
Criteria2_ID = unbox(reader.["Criteria2_ID"])
Criteria3_ID = unbox(reader.["Criteria3_ID"])
}
}
// Sequence transformation
let UserBase = GetUsers |> Seq.toList
// Creating the matrix
let matrixUA =
Matrix.ofList
[ // Create list containing rows from the database
for row in UserBase do
// For each row, return list of columns (float values)
yield [ float row.Criteria0_ID;
float row.Criteria1_ID;
float row.Criteria2_ID;
float row.Criteria3_ID;
] ]
matrixUA