Как загрузить только последнюю запись из объекта с помощью LINQ?

Я хочу получить значение поля с именем "Gram" из последней записи и поместить его значение в переменную без каких-либо условий.

Сначала я попробовал

int value = int.Parse(Entity.TblGold.LastOrDefault().Gram.ToString());

Второй я пробовал

int value = int.Parse(Entity.TblGold.Select(p => p.Gram).Last().ToString());

Я просто получаю это исключение:

LINQ to Entities does not recognize the method 'DataModel.TblGold LastOrDefault[TblGold](System.Linq.IQueryable``1[DataModel.TblGold])' method, and this method cannot be translated into a store expression.

Ответ 1

Last или LastOrDefault не поддерживаются в LINQ to Entities. Вы можете либо повторить запрос, используя ToList, либо ToArray, а затем применить Last или вы можете заказать по убыванию, а затем использовать First как:

int value = int.Parse(Entity.TblGold
                            .OrderByDescending(p => p.Gram)
                            .Select(r => r.Gram)
                            .First().ToString());

Ответ 2

Вы не можете сделать это в одном запросе, но вы можете сделать это за два.

var countOfRows = tbl.Count();

var lastRow = tbl.Skip(countOfRows - 1).FirstOrDefault();

Ответ 3

Если список правильно упорядочен, чтобы захватить последний элемент, я просто отменил список, а затем захватил первый (ранее последний) элемент:

var gram = int.Parse(Entity.TblGold.Reverse().First().Gram.ToString());

Ответ 4

У меня есть использование, которое может помочь кому-то.

var item = db.modelName.Where(x => x.Step_Id == Step.Parent_Step_Id).OrderByDescending(x => x.id).First();

Я использую сущность framework.

Ответ 5

Вы можете использовать порядок 1 == 1, и он работает

var countOfRows = tbl.Count();    
var lastRow = tbl.OrderBy(c => 1 == 1).Skip(countOfRows - 1).FirstOrDefault();