按类似日期分组

Moe*_*neh 2 c# asp.net-mvc asp.net-mvc-4

我想知道是否可以在2个日期之间对我从数据库中获得的结果进行分组.例如,我希望能够将相距6秒的结果分组,这样我就可以在前端分组显示它们.

我的最终目标是能够按截止日期/时间(例如相隔6秒)对结果进行分组.

Ser*_*rvy 5

我们可以使用这种通用辅助方法,它采用序列和谓词来获取每对连续项,并确定它们是否在同一组中以对项进行分组:

public static IEnumerable<IEnumerable<T>> GroupWhile<T>(
    this IEnumerable<T> source, Func<T, T, bool> predicate)
{
    using (var iterator = source.GetEnumerator())
    {
        if (!iterator.MoveNext())
            yield break;

        List<T> list = new List<T>() { iterator.Current };

        T previous = iterator.Current;

        while (iterator.MoveNext())
        {
            if (predicate(previous, iterator.Current))
            {
                list.Add(iterator.Current);
            }
            else
            {
                yield return list;
                list = new List<T>() { iterator.Current };
            }

            previous = iterator.Current;
        }
        yield return list;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我们拥有它就像它一样简单:

var query = data.OrderBy(item => item.Date)
    .GroupWhile((prev, next) => 
        (prev.Date - next.Date) <= Timespan.FromSeconds(6));
Run Code Online (Sandbox Code Playgroud)