Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ查询(按项目组分组)_C#_Linq - Fatal编程技术网

C# LINQ查询(按项目组分组)

C# LINQ查询(按项目组分组),c#,linq,C#,Linq,我有个小问题。我有一个数据库表,其中包含一些指标,如下所示: 我想得到红色组的列表,最后得到每个组的开始和结束(这是最简单的部分)。您知道怎么做吗?您可以使用此扩展方法创建满足谓词的序列组 public static IEnumerable<IEnumerable<T>> GroupBySequence<T>( this IEnumerable<T> source, Func<T, bool> predicate) {

我有个小问题。我有一个数据库表,其中包含一些指标,如下所示:


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

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

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;
}

这是您的整个表吗(宽度方向)?您是否有关于数据库中要筛选的数据的更多信息?是否有任何理由必须使用linq查询或任何其他方式进行筛选?IMHO RDBMS系统(以及linq)不适合这种类型的数据操作。手动迭代可能会更好,它与数据库中的模式、表或其他内容无关。它必须由LINQ和只包含数字的列完成。在这列(命名为Indicator)中,我有四个值1、2、3、4。我只能按值2对它们进行分组。虽然没有我想要的那么好,但这会很有帮助。谢谢。@Fka I将实现更改为按条件返回序列(而不是分隔符)。因为您提到了列中有四个可能的值,所以我认为您只需要
2
的值。顺便说一句,你不能在服务器端这么做,谢谢。我不能在服务器端这样做,因为应用程序必须使用不能更改的现有资源。非常感谢你!给我一杯啤酒!(或伏特加,如你所愿:P,我们住得并不远)
int[] data = { 1, 2, 1, 2, 2, 2, 1 };
var groups = data.GroupBySequence(i => i == 2); // returns [2] and [2,2,2]