#c# #.net #linq #entity-framework-4
#c# #.net #linq #entity-framework-4
Вопрос:
Я хотел бы отобразить информацию об оценке для каждого учащегося в results
переменной.
Способ настройки моей базы данных таков:
Grade --- GradeStudent --- Student
Таким образом, каждый отдельный год у меня есть уникальная GradeStudent
запись, содержащая идентификатор класса и идентификатор учащихся, а также год этой записи.
Я использовал Entity Framework 4 в качестве моего ORM, и я хотел бы отобразить название оценки в DataGridView для каждого учащегося.
private void btnSearch_Click(object sender, EventArgs e)
{
StudentRepository repo = new StudentRepository();
var results =
repo.FindAllStudents().Where(
s =>
s.Name == txtSearchQuery.Text ||
s.LastNameFather == txtSearchQuery.Text ||
s.LastNameMother == txtSearchQuery.Text);
dataGridView1.DataSource = results.Select(s => new
{
Codigo = s.StudentId,
Nombre = s.LastNameFather " " s.LastNameMother ", " s.Name,
Sexo = s.Sex,
Telefono = s.Telephone
}).ToList();
}
Если я попытаюсь сделать следующее, я смогу вызвать только коллекцию EntityCollection, поскольку с моим учеником может быть связано много объектов GradeStudent. По одному на каждый год.
Итак, мне нужно было бы получить оценку, в которой он был в течение X года.
У вас есть какие-либо предложения о том, как это сделать?
Комментарии:
1. Я немного запутался, является ли оценка (X) частью ваших критериев поиска? Т.Е. знаете ли вы год, когда участвуете в этом мероприятии, или вам нужно несколько записей о студентах за каждый год?
Ответ №1:
Если я правильно понял вопрос — вы хотите получить объект Grade (через среднюю таблицу GradeStudent). Если это так, вам нужно будет создать свойство NavigationProperty в вашей модели EF, чтобы связать оценку с GradeStudent (* — 1) и GradeStudent с Student (0 ..1 — *).
Что касается извлечения данных в вашем контексте, это приложение silverlight, использующее RIA? Если это так, метод GetStudentsQuery в вашем сервисе должен будет включать эти объекты, чтобы данные возвращались с вашим объектом Student.
Ответ №2:
Если grade
известно, это должно сработать:
StudentRepository repo = new StudentRepository();
var results =
repo.FindAllStudents().Where(
s =>
(s.Name == txtSearchQuery.Text ||
s.LastNameFather == txtSearchQuery.Text ||
s.LastNameMother == txtSearchQuery.Text) amp;amp;
s.GradeStudent.Any(gs => gs.Grade = grade));