Диаграмма ASP.NET для распределения оценок - PullRequest
0 голосов
/ 11 мая 2011

Я хотел бы показать элемент управления ASP.NET Chart, который показывает распределение оценок.

Показывает, сколько учеников получило оценку в диапазоне от А до F.

Как сделать так, чтобы диаграмма включала оценки A, B, C, D, F в тех случаях, когда ни один студент не получил, скажем, оценку D на букву? Например, я бы хотел, чтобы значение D отображалось на оси X, но с числом учеников, равным нулю.

Данные извлекаются из базы данных, и я использую ObjectDataSource для привязки к элементу управления диаграммы.

РЕДАКТИРОВАТЬ: Структура данных такова, что есть таблица учеников, и у каждого ученика есть FirstName, LastName и Grade.

РЕДАКТИРОВАТЬ: Для остальной части сайта я использую Entity Framework с LINQ (в отличие от написания необработанного SQL), поэтому в идеальном мире решение не будет включать в себя необработанный SQL.

Ответы [ 2 ]

0 голосов
/ 12 мая 2011

Не зная, как структурированы ваши данные, сложно дать подробный ответ.Вот способ сделать это с помощью выражений SQL Common Table (CTE).Он упорядочит данные так, чтобы вы могли легко связать их с элементом управления диаграммы.

Это создаст таблицу данных следующим образом:

| Grade | TotalGrades |
|-------|-------------| 
|   A   |      2      |
|   B   |      1      |
|   C   |      2      |
|   D   |      0      |
|   E   |      0      |
|   F   |      1      |

А вот код:

;With Grades (Grade) as
(
    SELECT 'A' Grade
    UNION
    SELECT 'B' Grade
    UNION
    SELECT 'C' Grade
    UNION
    SELECT 'D' Grade
    UNION
    SELECT 'E' Grade
    UNION
    SELECT 'F' Grade
),
GradeResults (Name,Grade) as
(
    SELECT 'John','A'
    UNION
    SELECT 'Sally','B'
    UNION
    SELECT 'Dave','C'
    UNION
    SELECT 'Charlie','C'
    UNION
    SELECT 'Lisa','F'
    UNION
    SELECT 'Russ','A'
)
SELECT a.Grade, COUNT(b.Grade) as TotalGrades FROM Grades a LEFT OUTER JOIN GradeResults b on a.Grade = b.Grade
GROUP BY a.Grade
ORDER BY a.Grade;
0 голосов
/ 11 мая 2011

Можно ли изменить запрос, включающий все оценки, и затем заполнить данные для каждой оценки? полный взлом - но чтобы показать вам идею, поскольку я не знаю вашу схему

select * from 
(
select 'a' Grade
union
select 'b' Grade
union
select 'c' Grade
union
select 'd' Grade
union
select 'f' Grade
) as grades g
outer join yourothertable t on g.Grade = t.Grade

Edit: после прочтения вашего редактирования, понимая, что вы не хотите, чтобы это было решение sql, тогда вы должны взять ваши объекты и соединить их linq с объектами, содержащими оценку.

см: http://www.hookedonlinq.com/OuterJoinSample.ashx использовать что-то вроде общественный класс { публичная строка LetterGrade; } заполните их список и выполните внешнее объединение результатов с вашим запросом. Ваша новая коллекция результатов linq - это то, что вы сейчас нашли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...