2011-01-24 2 views
0

У меня есть оператор LINQ следующим образом;Как написать оператор LINQ с условием GroupBy

 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 для Black. Однако, если у меня есть 2 или более объекта RequestInfo с тем же YearLeaveDate, я хочу, чтобы 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(); 
Смежные вопросы