首页 > 解决方案 > LINQ 按子句动态分组

问题描述

var query = trafficHandler.portList
            .Join(
            trafficHandler.timeList,
            p => p.PortId,
            t => t.PortId,
            (p, t) => new { Port = p, Time = t })
            .Join(
            trafficHandler.trafficList,
            pt => pt.Time.TimeId,
            tr => tr.TimeId,
            (pt, tr) => new { Port = pt.Port, Time = pt.Time, Traffic = tr })
            .Select(x => new
            {
                x.Port.PortNumber,
                x.Time.TimeNumber,
                x.Time.DayNumber,
                x.Traffic.Action,
                x.Traffic.User
            })
            .Where(x => allowedPort.Contains(x.PortNumber) && allowedDay.Contains(x.DayNumber) && allowedTime.Contains(x.TimeNumber) && allowedUser.Contains(x.User) && allowedAction.Contains(x.Action))
            .GroupBy(y => new { y.DayNumber, y.TimeNumber, y.User })
            .Where(z => z.Count() >= baseline)
            .OrderBy(g => g.Key.DayNumber)
            .ThenBy(g => g.Key.TimeNumber)
            .ThenBy(g => g.Key.User);

我如何动态地允许某些列能够分组?就像有时我需要将 y.Action 包含在 Group By 子句中一样,我不想重写每个 LINQ 查询,因为这将是很多冗余函数。阅读 Stack Overflow 上提出的其他一些类似问题,似乎您需要动态 LINQ 库,还有其他方法吗?

标签: linqgroup-by

解决方案


推荐阅读