0

My models are - employee

public class Employee
{
    public int EmployeeId { get; set; }
    public string GivenName { get; set; }
    public string Surname { get; set; }
    public virtual ICollection<EmployeeAudit> EmployeeAudits { get; set; }

}

and employee audit

public class EmployeeAudit
 {
    public int EmployeeAuditId { get; set; }

    public DateTime DateCreated { get; set; }
    public string AuditCode { get; set; }

    public int EmployeeId { get; set; }
    public Employee Employee { get; set; }
}

so i will have Employees that will have many EmployeeAudits as so -

employee
id-----name
1------bob
2------jim
3------sheila

audit
empid---auditcode-----------------datecreated
1---------created---------------------13/12/12
2---------created---------------------13/12/12
3---------created---------------------13/12/12
2---------SubmittedToHR-----------13/12/12
3---------SubmittedToHR-----------13/12/12
3---------PassedForVerification---13/12/12


The audits represents a certain stage in a process, how do i query using linq to show where in the process an employee is at.

for example i want to show all employees that are at SubmittedToHr but have been Created and not PassedForVerification.

4

1 に答える 1

0

This query will return all employees, which have last audit code equal to SubmittedToHR (assume audit code could change only from created > SubmittedToHR > PassedForVerification):

var query = from e in context.Employees
            join ea in context.EmployeeAudit 
                 on e.EmployeeId equals ea.EmployeeId into g
            where g.OrderByDescending(x => x.DateCreated)
                   .FirstOrDefault().AuditCode == "SubmittedToHR"
            select e;
于 2012-12-14T11:04:04.223 に答える