通过查询组合两个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": {}
}
]
}
]
}
任何帮助都会很棒!提前感谢!
您可以使用以下内容。它没有经过测试,因为我没有数据结构。
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) })
});