Итак, у меня есть такая таблица:
Now I want distinct ShortCode
order by the ID
descending. In other words, the distinct last records. Like this:
So I tried GroupBy like:
var data = db.ShortCodes.GroupBy(x => x.ShortCode).Select(x => x.FirstOrDefault()).OrderByDescending(s=> s.ID);
This gave me distinct records but not the last ones, nor ordered by ID descending:
Now I also tried like suggested здесь
var data = db.ShortCodeManager
.GroupBy(s => s. ShortCode)
.Select(g => g.First())
.OrderByDescending(s => s.ID);
Это дало мне ошибку The method 'First' can only be used as a final query operation. Consider using the method 'FirstOrDefault' in this instance instead.
Итак, я изменился на FirstOrDefault()
, например:
var data = db.ShortCodeManager
.GroupBy(s => s. ShortCode)
.Select(g => g.FirstOrDefault())
.OrderByDescending(s => s.ID);
Это также дало мне отдельные записи, но не последние записи:
So finally I tried like suggested здесь :
var data = db.ShortCodeManager.Where(a => a.ID > 0).GroupBy(x => x.ShortCode).OrderByDescending(grp => grp.Max(g => g.ID)).Select(a => a.FirstOrDefault());
Опять же, это дало мне отдельные записи, но не последние, и не упорядоченные по убыванию идентификатора:
введите описание изображения здесь
Итак, как мне написать запрос, чтобы получить желаемый результат в Linq? Также обратите внимание, мне нужно больше отдельных последних записей, чем упорядочивание по ID
по убыванию. Если кто-то также знает, как написать это в raw SQL, это тоже может быть полезно.