Эта строка вызывает проблему, потому что метод GetLogLevels()
возвращает IEnumerable<string>
, у которого нет свойства с именем Level
в его контексте:
var levels = new SelectList(logsData.GetLogLevels(),"Level","Level");
Существует несколько способов решения этой проблемы:
1) Преобразование непосредственно в IEnumerable<SelectListItem>
// Controller action
var levels = logsData.GetLogLevels().Select(x => new SelectListItem { Text = x, Value = x }).ToList();
// Model class
public class LevelsListViewModel
{
public List<SelectListItem> Levels { get; set; }
}
2) Использование перегрузки SelectList
с одним параметром
var levels = new SelectList(logsData.GetLogLevels());
3) Использование ToDictionary()
var levels = new SelectList(logsData.GetLogLevels().ToDictionary(), "Key", "Value");
Примечание: Если EventLogs
содержит несколько столбцов, вы не можете использовать Distinct()
таким образом. Вы должны использовать GroupBy
и Select
первые различные значения:
var data = dbContext.EventLogs.GroupBy(x => x.Level).Select(gr => gr.FirstOrDefault()).ToList();
return data;