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]