У меня есть этот запрос LINQ:заказа пользователя, а затем выберите максимальную дату
ArrayList arr = new ArrayList();
var data = conn.SCOT_DADOS.OrderByDescending(x => x.DATE)
.GroupBy(r => r.USER)
.ToList();
foreach (var item in data)
{
var itemdata = item.Where(r => r.DATE == item.Max(s => s.DATE));
var name = svc.GetUserName(itemdata.Select(r => r.USER).First().ToString());
var value = itemdata.Select(r => r.VALUE).First();
var date = itemdata.Select(r => r.DATE).First().ToString("dd/MM/yyyy HH:mm:ss");
arr.Add(new{ NAME = name, DATE = date, VALUE = value});
}
Этот код даст мне последний результат, DATE
для каждого USER
.
Но запрос LINQ выбирает все данные от пользователя, а затем я получаю последний в цикле foreach.
Есть ли способ получить только последние данные в запросе LINQ, поэтому мне не нужно принимать все пользовательские данные каждый раз?
Я попытался это:
var data = conn.SCOT_DADOS.OrderByDescending(x => x.DATE)
.GroupBy(r => r.USER)
.First()
.ToList();
А затем обрабатывают item
как объект, вместо запуска выбирает на нем.
Он дал мне все данные для отдельного пользователя, чего я не хочу.
Что можно сделать?
Edit 1:
Я получаю эту ошибку при попытке поменять OrderByDescending
и GroupBy
: CS1061
Error 'IGrouping' не содержит определение 'DATE' и нет метод расширения «DATE», принимающий первый аргумент типа «IGrouping», может быть найден ( у вас отсутствует директива using или ссылка на сборку?)
Edit 2:
Это некоторые выборочные данные (имена столбцов не то же самое, потому что я перевел их на вопрос):
Из приведенных данных , У меня были бы результаты:
Попробуйте поменять порядок и группу. –
Я получаю сообщение об ошибке. Я добавлю к вопросу. – Phiter
@Phiter Fernandes - Пожалуйста, объясните, что вы имеете в виду. Добавление ввода ввода и данных результата поможет –