Максимальная последовательность из представления, содержащего несколько записей с использованием Linq - PullRequest
0 голосов
/ 28 января 2011

Я был в этом некоторое время.У меня есть набор данных, который имеет повторяющийся ключ и последовательность, подобную этой:

id    status     sequence

1     open       1

1     processing 2

2     open       1

2     processing 2

2     closed     3

новая строка добавляется для каждого происходящего «действия», поэтому различные идентификаторы могут иметь переменные последовательности.Мне нужно получить максимальный порядковый номер для каждого идентификатора, но мне все равно нужно вернуть полную запись.

Я хочу получить последовательность 2 для идентификатора 1 и последовательность 3 для идентификатора 2.

Я не могу заставить это работать без выбора отдельных идентификаторов, затем циклически перебирать результаты, упорядочивать значения и затем добавлять первый элемент в другой список, но это так медленно.

var ids = this.ObjectContext.TNTP_FILE_MONITORING.Select(i => i.FILE_EVENT_ID).Distinct();
List<TNTP_FILE_MONITORING> vals = new List<TNTP_FILE_MONITORING>();
            foreach (var item in items)
            {

                vals.Add(this.ObjectContext.TNTP_FILE_MONITORING.Where(mfe => ids.Contains(mfe.FILE_EVENT_ID)).OrderByDescending(mfe => mfe.FILE_EVENT_SEQ).First<TNTP_FILE_MONITORING>());
            }

Должен быть лучший путь!

1 Ответ

0 голосов
/ 28 января 2011

Вот что сработало для меня:

var ts = new[] { new T(1,1), new T(1,2), new T(2,1), new T(2,2), new T(2,3) };
var q = 
    from t in ts 
    group t by t.ID into g 
    let max = g.Max(x => x.Seq)
    select g.FirstOrDefault(t1 => t1.Seq == max);

(Просто нужно применить это к вашей таблице данных, но запрос остается примерно таким же)

Обратите внимание, что с вашим текущим методом, потому чтовы перебираете все записи, вы также получаете все записей из хранилища данных.Используя такой запрос, вы разрешаете переводить в запрос к хранилищу данных, которое не только быстрее, но и возвращает только те результаты, которые вам нужны (при условии, что вы используете Entity Framework или Linq2SQL).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...