通过查询组合两个LINQ组

本文关键字:两个 LINQ 查询 组合 | 更新日期: 2024-10-07 13:29:22

我有两个LINQ分组查询,我想将它们组合在一起,先按LockAssignment.DateStart分组LockAssignments,然后按LockAssignments.Lock.Zone:分组

// 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": {}
                }
            ]
        }
    ]
}

任何帮助都会很棒!提前感谢!

通过查询组合两个LINQ组

您可以使用以下内容。它没有经过测试,因为我没有数据结构。

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