ПРИМЕЧАНИЕ. Я не хочу использовать функцию Database PIVOT, поскольку число классов, скорее всего, изменится, и вам придется обновить SQL-запрос.
То, что вы пытаетесь сделать, не должно быть сделано в представлении.
Объект Model должен быть достаточно простым для отображения при передаче в представление.
Потому что в View не должно быть сложной логики.
Следовательно, нам нужно предварительно обработать данные, возвращенные из базы данных SQL Server в первую очередь.
Я предполагаю, что у вас есть такой объект, потому что вы не упомянули, что у него есть уникальный идентификатор, такой как «CustomerId» или что-то в этом роде.
public class CourseData {
public string FirstName { get; set; }
public string LastName { get; set; }
public string ClassName { get; set; }
}
Это будет мой объект [Model].
public class MyViewModel {
public IDictionary<string, IList<string>> CourseData { get; set; }
public int MaxCourseCount { get; set; }
}
Это мой метод действия в контроллере.
public ActionResult MyView()
{
IDictionary<string, IList<string>> dict = new Dictionary<string, IList<string>>();
// retrieve data from the database
IList<CourseData> result = RetrieveData();
foreach (var item in result)
{
// [FirstName] and [LastName] combo will be used as KEY entry
string key = item.FirstName + " " + item.LastName;
if (dict.ContainsKey(key))
{
// add the class name into an existing "string" collection
dict[key].Add( item.ClassName );
}
else
{
// instantiate a new "string" collection and add the class name.
dict[key] = new List<string> { item.ClassName };
}
}
// find out which Person has attended the most number of classes.
int maxCourseCount = 0;
foreach (var key in dict.Keys)
{
int valueCount = dict[key].Count;
if (valueCount > maxCourseCount)
maxCourseCount = valueCount;
}
MyViewModel model = new MyViewModel {
CourseData = dict,
MaxCourseCount = maxCourseCount
};
return View(model);
}
Я объединил данные в структуру данных, которую легче рендерить.
Я намеренно добавил свойство [MaxCourseCount] к моему объекту Model, поскольку кажется, что вы хотите отобразить данные курса в формате .
Итак, все, что вам нужно сделать сейчас, это
- перебирает ключи вашего словаря Model.CourseData объекта.
- отображает названия курсов в отдельных ячейках таблицы.
- рендеринг оставшихся ячеек таблицы на основе значения [MaxCourseCount] вашей модели.
Надеюсь, это поможет.
-Soe