2011-01-24 45 views
0

我有這樣的LINQ語句如下;如何寫一個GroupBy條件的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我回黑色的FontColour財產。 但是,如果我有2個或更多具有相同AnnualLeaveDate的RequestInfo對象,我希望FontColour被設置爲紅色。 如何重寫這個查詢來做到這一點?

回答

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