如何编写具有GroupBy条件的LINQ语句

时间:2011-01-24 10:00:29

标签: linq

我有以下LINQ语句;

        var RequestList = (from emp in _employeeIds
                from x in db.AnnualLeaveBookeds
                where x.EmployeeId == emp
                orderby x.AnnualLeaveDate
                select new RequestInfo
                {
                    AnnualLeaveBookedId = x.AnnualLeaveBookedId,
                    AnnualLeaveDate = x.AnnualLeaveDate,
                    MorningOnlyFlag = x.MorningOnlyFlag,
                    AfternoonOnlyFlag = x.AfternoonOnlyFlag,
                    Forename = x.Employee.Forename,
                    Surname = x.Employee.Surname,
                    EmployeeId = x.Employee.EmployeeId,
                    RequestDate = x.RequestDate,
                    CancelRequestDate = x.CancelRequestDate,
                    ApprovedFlag = (x.ApprovalDate.HasValue && x.ApproverId != Employee.LoggedInUser.EmployeeId),
                    ApproveFlag = false,
                    RejectFlag = false,
                    Reason = string.Empty,
                    FontColour = "Black"
                })
                .ToList();

对于每个RequestInfo,我返回Black的FontColour属性。 但是,如果我有2个或更多具有相同AnnualLeaveDate的RequestInfo对象,我希望将FontColour设置为红色。 如何重写此查询来执行此操作?

1 个答案:

答案 0 :(得分:2)

尝试这样的事情:

var RequestList = (
    from emp in _employeeIds
    from x0 in db.AnnualLeaveBookeds
    where x0.EmployeeId == emp
    orderby x0.AnnualLeaveDate
    group x0 by x0.AnnualLeaveDate into xs
    from x in xs
    select new RequestInfo
    {
        AnnualLeaveBookedId = x.AnnualLeaveBookedId,
        AnnualLeaveDate = x.AnnualLeaveDate,
        MorningOnlyFlag = x.MorningOnlyFlag,
        AfternoonOnlyFlag = x.AfternoonOnlyFlag,
        Forename = x.Employee.Forename,
        Surname = x.Employee.Surname,
        EmployeeId = x.Employee.EmployeeId,
        RequestDate = x.RequestDate,
        CancelRequestDate = x.CancelRequestDate,
        ApprovedFlag = (x.ApprovalDate.HasValue
            && x.ApproverId != Employee.LoggedInUser.EmployeeId),
        ApproveFlag = false,
        RejectFlag = false,
        Reason = string.Empty,
        FontColour = xs.Count() > 1 ? "Red" : "Black"
    }).ToList();