Как загрузить только последнюю запись из объекта с помощью 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();