2015-08-19 2 views
1

Я довольно новичок в структуре MVC и сущности, и я надеялся, что кто-то сможет мне помочь.Сортировка списка SQL по int

У меня есть база данных SQL, в которой есть столбец, содержащий int. Я хочу, чтобы вытащить эти ценности и положить их в html.dropdownlistfor

Я первоначально пытался сделать:

List<SelectListItem> List = dbAccess.KeywordCorrelationData.Select(
temp => new { 
    Value = temp.DefaultDestroyPeriod.ToString(), 
    Text = temp.DefaultDestroyPeriod.ToString() 
}).OrderBy(temp => temp.Value).Distinct().ToList(); 

Однако это только сортируется по текстовому значению не числовое значение.

Я с тех пор нашел решение, но это намного больше:

List<SelectListItem> List= new List<SelectListItem>(); 

List<int> tempIntList = dbAccess.KeywordCorrelationData.Select(temp => temp.DefaultDestroyPeriod).Distinct().ToList(); 

tempIntList.Sort(); 

foreach (int tempInt in tempIntList) 
{ 
    int wholeYears = (int)Math.Round((double)tempInt/365, 0); 
    SelectListItem newItem = new SelectListItem() 
    { 
     Value = tempInt.ToString(), 
     Text = tempInt.ToString() + " days (approx. " + wholeYears.ToString() + (wholeYears == 1 ? " year)" : " years)") 
    }; 

    List.Add(newItem); 
} 

return List; 

мне было интересно, если есть более простой способ сделать это, чем это? Я googled и искал здесь, но не могу найти ничего подобного.

Благодаря

+0

Что такое тип данных 'DefaultDestroyPeriod'? – DavidG

ответ

0

Предполагая, что DefaultDestroyPeriod уже числового типа, просто применить порядок, прежде чем сделать Select:

List<SelectListItem> List = dbAccess.KeywordCorrelationData 
    .OrderBy(kcd => kcd.DefaultDestroyPeriod) 
    .Select(kcd => new 
    { 
     Value = kcd.DefaultDestroyPeriod.ToString(), 
     Text = kcd.DefaultDestroyPeriod.ToString() 
    }).Distinct().ToList(); 
+0

Я просто попробовал это, он вытаскивает данные, но не сортируется в правильном порядке. И чтобы ответить на ваш другой комментарий, 'DefaultDestroyPeriod' является int – RyuAkamatsu

Смежные вопросы