2015-03-05 6 views
0

У меня есть два LINQ группы по запросам, которые я хотел бы объединить группировки LockAssignments сначала LockAssignment.DateStart, затем LockAssignment.Lock.Zone:Объединить две группы LINQ запросов

// get the current lock assignments by day for a user 
var lockAssignmentByDayForUserQuery = from la in 
(
    from la in db.LockAssignment 
    select new 
    { 
     LockAssignment = la, 
     UserId = la.UserId, 
     DateStart = DbFunctions.TruncateTime(la.DateStart), 
     DateExpire = DbFunctions.TruncateTime(la.DateExpire) 
    } 
) 
orderby la.DateStart 
group la by la.DateStart into gGroup 
select new 
{ 
    DateStart = gGroup.Key, 
    LockAssignments = gGroup.Where(q => q.UserId.Equals(userIdForUsername)) 
}; 

var lockAssignmentByDayForUser = lockAssignmentByDayForUserQuery.ToArray(); 

// get the current lock assignments by day for each zone for a user 
var lockAssignmentInZoneByDayForUserQuery = from la in 
(
    from la in db.LockAssignment 
    select new 
    { 
     LockAssignment = la, 
     UserId = la.UserId, 
     DateStart = DbFunctions.TruncateTime(la.DateStart), 
     DateExpire = DbFunctions.TruncateTime(la.DateExpire) 
    } 
) 
orderby la.DateStart 
group la by la.LockAssignment.Lock.Zone.ZoneName into gGroup 
select new 
{ 
    Zone = gGroup.Key, 
    LockAssignments = gGroup.Where(q => q.UserId.Equals(userIdForUsername)) 
}; 

var lockAssignmentInZoneByDayForUser = lockAssignmentInZoneByDayForUserQuery.ToArray(); 

в течение конечный результат:

{ 
    "lockAssignmentInZoneByDayForUser": [ 
     { 
      "DateStart": "2015-03-04T00:00:00", 
      "LockAssignments": [ 
       { 
        "Zone": "Watches", 
        "LockAssignmentDetails": {} 
       }, 
       { 
        "Zone": "Jewlery", 
        "LockAssignmentDetails": {} 
       } 
      ] 
     }, 
     { 
      "DateStart": "2015-03-05T00:00:00", 
      "LockAssignments": [ 
       { 
        "Zone": "Jewlery", 
        "LockAssignmentDetails": {} 
       } 
      ] 
     } 
    ] 
} 

Любая помощь будет замечательной! Заранее спасибо!

+1

пожалуйста форматировать Ваш код так что читаемый ... (удалить все пробелы слева) –

+0

@RufusL Я просто переформатировать код, чтобы сделать его более удобным для чтения. – Cole

+0

Можете ли вы объяснить свой ожидаемый результат? Это не соответствует вашим запросам, поэтому без четкого объяснения трудно понять, чего вы хотите достичь. – aush

ответ

0

Вы можете использовать что-то вроде ниже. Он не тестируется, так как у меня нет структуры данных.

db.LockAssignment.OrderBy(la => la.DateStart) 
       .GroupBy(la => la.DateStart).Select(datedGroup => new 
       { 
        DateStart = datedGroup.Key, 
        LockAssignments = datedGroup.GroupBy(la => la.Zone, grp => new { Zone = grp.Zone, Details = datedGroup.Select(result => result) }) 
       }); 
Смежные вопросы