LINQ查询(按项目组分组)

时间:2013-07-23 07:24:48

标签: c# linq

我有点问题。我有一些数据库表,其中包含一些指标: DB Table

我想获得RED组的列表,最后得到每组的开始和结束(这是最简单的部分)。你知道怎么做吗?

1 个答案:

答案 0 :(得分:1)

您可以使用此扩展方法创建满足谓词的序列组

public static IEnumerable<IEnumerable<T>> GroupBySequence<T>(
    this IEnumerable<T> source, Func<T, bool> predicate)
{
    var iterator = source.GetEnumerator();
    List<T> group = new List<T>();
    while (iterator.MoveNext())
    {
        if (predicate(iterator.Current))
        {
            group.Add(iterator.Current);
            continue;
        }            

        if (group.Any())
        {                    
            yield return group;
            group = new List<T>();
        }
    }

    if (group.Any())
        yield return group;
}

用法:

int[] data = { 1, 2, 1, 2, 2, 2, 1 };
var groups = data.GroupBySequence(i => i == 2); // returns [2] and [2,2,2]