Как я могу отфильтровать конкретную информацию из EntityCollection?

#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));