Moe*_*neh 2 c# asp.net-mvc asp.net-mvc-4
我想知道是否可以在2个日期之间对我从数据库中获得的结果进行分组.例如,我希望能够将相距6秒的结果分组,这样我就可以在前端分组显示它们.
我的最终目标是能够按截止日期/时间(例如相隔6秒)对结果进行分组.
我们可以使用这种通用辅助方法,它采用序列和谓词来获取每对连续项,并确定它们是否在同一组中以对项进行分组:
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)