/// <summary> /// faz o calculo da distancia minima dos registros de table /// para a minha base de dados original /// </summary> /// <param name="table"></param> private void CalculoMin(DataTable table) { double distancia = -1; int indexOriginal = -1; foreach (DataRow dr in table.Rows) { List <double> listY = dr.ItemArray.Select(x => Convert.ToDouble(x)).Take(Dados.Columns.Count).ToList(); if (dr.Table.Columns.Contains("indexOriginal")) { /*se tiver "indexOriginal" gravo esse * valor para evitar calcular a distancia dele para ele mesmo*/ indexOriginal = Convert.ToInt32(dr["indexOriginal"]); } for (int i = 0; i < Dados.Rows.Count; i++) { if (dr.Table.Columns.Contains("indexOriginal")) { if (i == indexOriginal) { continue; } } List <double> listX = Dados.Rows[i].ItemArray.Select(x => Convert.ToDouble(x)).Take(Dados.Columns.Count).ToList(); distancia = Formulas.Distancia(listX, listY); //i == 0 significa que estou na primeira execução e a distancia ainda está em branco. //i == 1 e index original ==0 significa que estou na primeira execução pois se o index original. == 0 ele pula a primeira execução if ((i == 0 || (i == 1 && indexOriginal == 0)) || Convert.ToDouble(dr["DistanciaMin"]) > distancia) { dr["DistanciaMin"] = distancia; } } } }