2011-01-24 11 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について、私はBlackのFontColourプロパティを返します。 しかし、同じAnnualLeaveDateを持つ2つ以上の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(); 
関連する問題