Свойство Order by Collection в ASP.NET MVC 3 (структура сущностей) - PullRequest
0 голосов
/ 11 марта 2012

У меня есть две сущности, такие как:

public class Employee
{
    public int Id { get; set; }

    public string Name { get; set; }
    public string Lastname { get; set; }

    public virtual ICollection<EmployeeEducation> EducationList { get; set; }
}

и

public class EmployeeEducation
{
    public int Id { get; set; }

    public int EmployeeId { get; set; }

    public int Type { get; set; }

    [ForeignKey("EmployeeId")]
    public virtual Employee Employee { get; set; }

}

У меня вопрос, как я могу получить конкретного сотрудника и список образования этого сотрудника, упорядоченный по Типу свойству?

Я пытался:

Employee employee = _work.EmployeeRepository.GetSet()
    .SelectMany(e => e.EducationList, (e,d) => new { e, d })
        .OrderBy(x => x.d.Type)
        .Select(x => x.e)
   .FirstOrDefault(e => e.Id == id);

Но, похоже, это не сортировка. Как правильно это сделать?

Спасибо всем ...

Ответы [ 2 ]

1 голос
/ 11 марта 2012

Вы делаете SelectMany(), но никогда не используете произведенную EducationList деталь, потому что вы делаете .Select(x => x.e).Но разве жизнь не может быть проще?В конце концов, вы получаете только 1 сотрудника, почему бы не отсортировать EducationList, как только вам это нужно, после Include d, если необходимо:

Employee employee = _work.EmployeeRepository.GetSet().Include("EducationList")
.FirstOrDefault(e => e.Id == id);
1 голос
/ 11 марта 2012

В зависимости от того, используете ли вы POCO или нет, вы должны либо использовать CreateSourceQuery () , либо Query () В случае POCO что-то вроде:

Employee employee = _work.EmployeeRepository.GetSet()
    .SelectMany(e => e.EducationList, (e,d) => new { e, d })
        .Query()
        .OrderBy(x => x.d.Type)
        .Select(x => x.e)
   .FirstOrDefault(e => e.Id == id);
...