繁体   English   中英

如何转换IEnumerable <CustomType> 列出,应用分组逻辑,然后转换回IEnumerable <CustomType> ?

[英]How to convert IEnumerable<CustomType> to List, applying grouping logic, and convert back to IEnumerable<CustomType>?

我想从表中获取项目列表,应用分组逻辑(按分配类型,开始时间和结束时间分组),然后转换回起始类型。

  IEnumerable<Assignment> assignments = UnitOfWork.AssignmentRepository.Get(filter: a => a.Start.CompareTo(start) >= 0
                    && a.End.CompareTo(end) <= 0,
                    orderBy: o => o.OrderBy(a => a.Start));

    List<Assignment> pre_alerts = new List<Assignment>();

 foreach (Assignment a in assignments)
            {
                foreach (AssignmentType t in assignmentTypes)
                {  // determine if the assignment's type has a minimum required
                    if (a.AssignmentTypeID == t.AssignmentTypeID && t.Minimum>0)
                    {

                        // get the minimum assignments requierd
                        int min_required = t.Minimum;

                        DateTime s = a.Start;
                        DateTime e = a.End;
                        AssignmentType type = a.AssignmentType;

                        IEnumerable<Assignment> minimum_assignments = UnitOfWork.AssignmentRepository.Get(filter: m => m.Start.CompareTo(s) >= 0 && m.End.CompareTo(e) <= 0 && m.AssignmentTypeID == a.AssignmentTypeID, orderBy: o => o.OrderBy(m => m.Start));

                        int min_actual = minimum_assignments.Count();

                        if (min_actual < min_required)
                        { 
                        // add a single alert for time range and assignment type
                           pre_alerts.Add(a);
                        }
                    }
                }
            }
 var alerts = pre_alerts.GroupBy(x => new Assignment{ x.AssignmentTypeID, x.Start, x.End }).Select(k => k);

如何将警报转换为IEnumerable<Assignment>

使用Select您已经将其作为IEnumerable返回。 如果您希望它是您的类型,则:

var alerts = pre_alerts.GroupBy(x => new Assignment{ x.AssignmentTypeID, x.Start, x.End }).Select(k => k.Key);

GroupBy的结果是一个IGrouping因此仅选择k即可返回IEnumerable<IGrouping<Assignment...>>

但是在我看来,如果是这种情况,那么没有理由使用GroupBy而只需Select来创建分配,然后

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM