Найдите минимальное значение в строке из Dynamic Datatable

Итак, у меня есть 2 таблицы данных. Первая таблица данных - это традиционная таблица данных, которая получает данные из определенных операторов sql.

Дата 1:

 | user_point |  | lat       |  | lng        |  | radius      |
 --------------------------------------------------------------
 | userpoint0 |  | 43.702943 |  | -79.37478  |  | 3.10685596  | 
 | userpoint1 |  | 43.672655 |  | -79.479837 |  | 4.970969536 |

Однако определенные столбцы динамически генерируются в Datatable 2 на основе количества пользовательских точек в Datatable 1.

 | id    |    | lat              | | lng               |  | DistanceFromUserpoint0 | | DistanceFromUserpoint1 | 
 -------------------------------------------------------------------------------------------------------------
 | 23184 |    | 43.6495246887207 | | -79.4244003295898 |  | 4.4464409231533  |       | 3.19880848195014 | 
 | 37957 |    | 43.6372413635254 | | -79.4151458740234 |  | 4.96760996486758 |       | 4.05524888969018 | 
 | 37965 |    | 43.636589050293  | | -79.4169921875    |  | 5.04670564187353 |       | 4.00990129127938 | 
 | 60467 |    | 43.735538482666  | | -79.4437942504883 |  | 4.11692339031897 |       | 4.70303114025665 | 
 | 60475 |    | 43.735538482666  | | -79.4437942504883 |  | 4.11692339031897 |       | 4.70303114025665 | 
 | 65615 |    | 43.7292861938477 | | -79.4317932128906 |  | 3.37923630122185 |       | 4.59015403452972 | 
 | 65623 |    | 43.7292861938477 | | -79.4317932128906 |  | 3.37923630122185 |       | 4.59015403452972 | 
 | 3196486 |  | 43.6624603271484 | | -79.4242172241211 |  | 3.7316961595166  |       | 2.86768157143755 | 
 | 3196494 |  | 43.6624603271484 | | -79.4242172241211 |  | 3.7316961595166  |       | 2.86768157143755 | 
 | 5756393 |  | 43.719165802002  | | -79.4295654296875 |  | 2.95683309139676 |       | 4.07847187106957 | 
 | 5756922 |  | 43.719165802002  | | -79.4295654296875 |  | 2.95683309139676 |       | 4.07847187106957 | 
 | 5756956 |  | 43.719165802002  | | -79.4295654296875 |  | 2.95683309139676 |       | 4.07847187106957 | 
 | 5756991 |  | 43.719165802002  | | -79.4295654296875 |  | 2.95683309139676 |       | 4.07847187106957 | 
 | 5757096 |  | 43.719165802002  | | -79.4295654296875 |  | 2.95683309139676 |       | 4.07847187106957 |
 | 5757134 |  | 43.719165802002  | | -79.4295654296875 |  | 2.95683309139676 |       | 4.07847187106957 |

Теперь я добавлю новый столбец в конце таблицы данных 2 под названием Closest_userpoint, в котором будет храниться значение расстояния, которое является ближайшей точкой пользователя для этой строки.

Итак, теперь мой вопрос заключается в том, как найти наименьшее / минимальное значение для этой строки, в которой есть столбцы, которые генерируются динамически (что означает, что может быть любое количество пользовательских точек от нуля до 100). Ищу самый простой и действенный ответ, Спасибо

РЕДАКТИРОВАТЬ:

Вот мой код для создания динамических столбцов, однако я застрял в выяснении логики для заполнения столбца closestUserpoint минимальным значением для этой строки на основе расстояния от точек пользователя.

ИЗМЕНИТЬ 2:

БОНУСНЫЙ ВОПРОС:

Наконец, я хочу определить, попадает ли это ближайшее значение Point / Min в raidus для той точки пользователя, которая является ближайшей.


person Prakash Chennupati    schedule 13.09.2013    source источник
comment
Есть несколько способов сделать это. Не могли бы вы показать нам, что вы пробовали / о чем думали?   -  person Adriano Carneiro    schedule 13.09.2013
comment
Я разместил свой код, чтобы узнать, как я динамически вычисляю расстояние от точек пользователя и создаю столбцы, в которых я застрял, пытаясь понять логику заполнения столбца closetUserpoint значением min.   -  person Prakash Chennupati    schedule 13.09.2013
comment
Не уверен, что это актуально, но SQL2008 сделает для вас такой тип «Какая точка является ближайшей к X», используя некоторые новые географические особенности.   -  person Daniel Dawes    schedule 13.09.2013
comment
Я бы хотел, чтобы все выполнялось в самом коде C #, поскольку я вообще не сохраняю свои значения расстояния в sql, поскольку столбцы генерируются динамически, что было бы не очень эффективно, если бы я сохранял их в sql, как это   -  person Prakash Chennupati    schedule 13.09.2013
comment
@AdrianCarneiro, если я могу сделать это более эффективно с самим sql, без использования C #, пожалуйста, предложите, как написать мой запрос, чтобы получить ближайшие точки, table1 (userpoint, lat, lng, radius) и table2 (id, lat, lng)   -  person Prakash Chennupati    schedule 13.09.2013


Ответы (1)


будет проще, если вы попытаетесь найти минимальные значения после заполнения значений

используйте System.Linq; для метода Min ()

if (userpoints.Rows.Count > 1)
{
foreach (DataRow dr in selectedPanels.Rows)
{
List<string> alluserpoints = new List<string>();             
for (int i = 0; i < userpoints.Rows.Count; i++)
{
if (Convert.ToDouble(userpoints.Rows[i].radius) > Convert.ToDouble(dr["DistanceFromUserpoint" + i]))
{
    alluserpoints.Add(dr["DistanceFromUserpoint" + i]+"+userpoint"+i);
}
}
if(alluserpoints.Count>0)
dr["Closest_UserPoint"] = alluserpoints.Min();  
else
dr["Closest_UserPoint"] ="none";                        
}
}
else
{
foreach(DataRow dr in selectedPanels.Rows)
{
if(Convert.ToDouble(userpoints.Rows[0].radius>Convert.ToDouble(dr["DistanceFromUserpoint0"])
{
dr["Closest_UserPoint"]=dr["DistanceFromUserpoint0"]+"+userpoint0";
}
else
{
dr["Closest_UserPoint"]="none";
}
}
}
person Nithin Nayagam    schedule 13.09.2013
comment
Я бы предпочел не использовать Linq, потому что я больше нигде не использую его в своем коде. это сработает, но не могли бы вы предложить решение, не используя linq, пожалуйста. - person Prakash Chennupati; 13.09.2013
comment
Кроме того, мне все еще нужно выяснить. если эта ближайшая точка / расстояние попадает в радиус этой точки пользователя. - person Prakash Chennupati; 13.09.2013
comment
затем вы можете отсортировать список alluserpoints с помощью метода Sort () и назначить alluserpoints [0] ближайшей точке пользователя. Это не самое эффективное решение, но если вы действительно делаете это в коде C #, используйте его. - person Nithin Nayagam; 13.09.2013
comment
@ programmer_41 О, тогда я думаю, вам нужно использовать LINQ. Сделать это без LINQ будет слишком сложно. - person Nithin Nayagam; 13.09.2013
comment
@ programmer_41 Я отредактировал свой ответ так, что только расстояния, находящиеся в пределах радиуса, будут учитываться и добавляться в список. - person Nithin Nayagam; 13.09.2013
comment
ваше решение не работает, оно не дает мне точного ближайшего пункта, см. таблицу ниже - person Prakash Chennupati; 13.09.2013
comment
давайте продолжим обсуждение в чате - person Prakash Chennupati; 13.09.2013
comment
Я редактирую свой запрос с обновленной таблицей к вашему решению, он не дает правильного значения для этой строки, я думаю, что список хранит значения для столбца, а не для строки - person Prakash Chennupati; 13.09.2013