2013-07-23 2 views
2

У меня есть небольшая проблема. У меня есть таблица базы данных с некоторыми индикаторами, которые выглядят так: DB TableЗапрос LINQ (группа по группам элементов)

Я хочу получить список RED-групп и, наконец, получить начало и конец каждой группы (это самая простая часть). Вы знаете, как это сделать?

+0

является то, что весь ваш стол (по ширине)? –

+0

У вас есть дополнительная информация о данных в базе данных, которые вы хотите фильтровать? –

+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] 
+0

Не так хорошо, как хотелось, но это будет полезно. Спасибо. – Fka

+0

@Fka Я изменил реализацию, чтобы возвращать последовательности по условию (вместо разделителя). Потому что вы упомянули, что в столбце есть четыре возможных значения, поэтому я думаю, что вам нужны только значения '2'. BTW вы не можете сделать это на стороне сервера –

+1

Спасибо. Я не могу сделать это на стороне сервера, потому что приложение должно использовать существующие ресурсы, которые нельзя изменить. Спасибо огромное! Большое пиво от меня! (или водки, как вы пожелаете: P, мы не живем так далеко друг от друга) – Fka

Смежные вопросы